【问题标题】:ASP.NET MVC4 + Razor on Mono + EF 6 DateTime crashASP.NET MVC4 + Razor on Mono + EF 6 DateTime 崩溃
【发布时间】:2014-08-29 22:48:06
【问题描述】:

我正在尝试使用 Mono 运行应用程序。它在 IIS 上运行良好,但我希望它在 Mono 上运行。但它总是把这个扔给我:

“Article”上的“CreateDate”属性无法设置为“System.String”值。您必须将此属性设置为“System.DateTime”类型的非空值。

事实是,它被抛出的地方是这样的:

public Article[] Select(int number)
        {
            return DbContextProvider.Current.Set<Article>()
                .OrderByDescending(n => n.CreateDate)
                .Take(number)
                .ToArray();
        }

没有任何地方使用 System.String。实际上,它被转换为字符串的唯一地方是:

@using BaseSite.Extensions.DateTimeExtensions
@model Classic.Views.Home.Articles.ArticleViewModel

<div class="article-wrapper">
    <div class="article-title">
        @Html.ActionLink(Model.Title, "Index", "Articles", new RouteValueDictionary{{"articleId", Model.ArticleId}}, null)
    </div>
    @Html.Raw(Model.Text)
    <div class="article-data date">
        @Html.ActionLink(Model.UserId, "Index", "Profile", new RouteValueDictionary{{"userId", Model.UserId}}, null),
        @Model.CreateDate.Format(true)
    </div>
</div>

但是在此之前就抛出了错误。而且,它可以在 IIS 上运行,只有在 Mono 上存在这样一个奇怪的错误。

数据库表布局为:

CREATE TABLE [dbo].[Articles](
    [ArticleId] [uniqueidentifier] NOT NULL,
    [UserId] [nvarchar](30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [CreateDate] [datetime2](7) NOT NULL,
    [Title] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [Text] [nvarchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
PRIMARY KEY CLUSTERED 
(
    [ArticleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

映射类:

using System;

namespace BusinessObjects.Articles
{
    public class Article
    {
        public Guid ArticleId { get; set; }
        public string UserId { get; set; }
        public DateTime CreateDate { get; set; }

        public string Title { get; set; }
        public string Text { get; set; }
    }
}

using System.Data.Entity;

namespace BusinessObjects.Articles
{
    public class ArticleMapper : IDbMapper
    {
        public void Map(DbModelBuilder modelBuilder)
        {
            var entity = modelBuilder.Entity<Article>();

            entity.HasKey(n => n.ArticleId);
            entity.Property(n => n.ArticleId).IsRequired();

            entity.Property(n => n.UserId).IsRequired().HasMaxLength(30);
            entity.Property(n => n.Title).IsRequired().HasMaxLength(50);
            entity.Property(n => n.Text).IsRequired().IsMaxLength();
        }
    }
}

是的。我还有其他带有 DateTime 的表,它们都得到了那个错误。它们都在 IIS (MS Stack) 上正常运行,它只在 Mono + xsp4 上出现错误。 任何人都可以提供任何帮助吗?我迷失在这种怪异中。

PS:我尝试了几乎所有单声道版本,现在我在 Mono git master 3.8.1 (master/38c3874),与 3.6、3.2.8 等相同

【问题讨论】:

  • 我认为我之前在 Mono 上将 datetime2 作为 SQL 列时遇到了问题,似乎还不支持。您可以尝试删除该列并查看它是否有效?
  • 啊哈,所以它是 Mono 错误上的 datetime2 列?因为我考虑迁移到 PgSql,有帮助吗?
  • 没有 datetime2 是否有效?在这种情况下,迁移到 PgSql 可能会有所帮助,因为我认为它不使用那种类型。
  • 我迁移到 PgSql,所以问题消失了

标签: c# asp.net-mvc-4 iis mono


【解决方案1】:

正如 Alexander Köplinger 所提到的,这似乎是 Mono 中“datetime2”的一个错误。通过从 MsSql 迁移到 PostgreSql 来修复 - 它在计划中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2014-01-14
    相关资源
    最近更新 更多