【问题标题】:datetime2 and ProviderManifestToken in Entity Framework实体框架中的 datetime2 和 ProviderManifestToken
【发布时间】:2010-10-30 19:03:10
【问题描述】:

我有一个使用实体框架和 SQL Server 2008 数据库的 MVC 应用程序。我使用 EF 向导生成了我的数据模型。

我有一个带有标准 DateTime 列的 SQL Server 表。 EF 模型使用System.DateTime

但是,当我尝试从我的应用程序向该表中插入一条新记录时,没有为此 DateTime 列指定值,我收到错误:

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。

我在 Google 上搜索了一下,发现人们正在编辑 edmx 并更改 ProviderManifestToken。显然这将被覆盖,那么是否有更永久的修复或修复此问题的方法?

【问题讨论】:

    标签: sql-server-2008 asp.net-mvc-2 entity-framework-4


    【解决方案1】:

    问题是因为,就像你说的那样,你没有为实体上的 DateTime 属性设置任何值,这导致它默认为“0001-01-01”,这绝对超出了 datetime 列。 datetime 类型的日期范围是1753 年 1 月 1 日到 9999 年 12 月 31 日

    要解决这个问题,您必须在将该属性发送到 SQL Server 之前为其分配一个范围内的值,或者将您的 DB 列类型更改为 datetime2,其日期范围为 0001-01-01 到 9999- 12-31.

    【讨论】:

    • 如果我没有为实体属性显式设置值,EF不应该插入一个null吗?
    • 否,它将被设置为 .Net 中的默认值(日期时间)。请注意,DateTime 是一个值类型,不能为 Null,但是 DateTime?能够。 EF 中有多种方法可以根据其使用情况自动填充此属性(基本上是任何实体的属性)。
    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    相关资源
    最近更新 更多