【问题标题】:Schema specified is not valid指定的架构无效
【发布时间】:2012-02-15 19:27:02
【问题描述】:

我遇到了一个错误,我的实体框架有一个错误。我有一个 SQL Server 2005 SP2。

当 ProviderManifestToken = "2008" 我得到这个错误。

The version of SQL Server in use does not support datatype 'datetime2'.

我已经完成了shown here 的更改,当更改为“2005”时,我得到了

Schema specified is not valid. Errors: 
DatabaseAccess.Schema.Model1.ssdl(2,123) : error 0169: All SSDL artifacts must
target the same provider. The ProviderManifestToken '2008' is different 
from '2005' that was encountered earlier.

我不明白

我的数据库版本是 Microsoft SQL Server Standard Edition(64 位)9.00.3042.00

我尝试删除架构并重新添加它无济于事。重启等

我还让我所有的日期时间字段都可以为空

【问题讨论】:

  • datetime2 数据类型在 SQL Server 2005 中不可用。
  • 我知道,我不知道它是怎么捡起来的,在我的配置中 public Nullable<:system.datetime> MessageDate { get { return _MessageDate; } 设置 { OnMessageDateChanging(值); ReportPropertyChanging("消息日期"); _MessageDate = StructuralObject.SetValidValue(value); ReportPropertyChanged("消息日期"); OnMessageDateChanged(); } }
  • 在我的任何源代码中都找不到 datetime2
  • datetime2 是 SQL 数据类型,而不是 .NET 数据类型。根据您使用的提供程序(SQL Server 2005、2008 等),您的每个实体的属性都从 .NET 类型映射到 SQL 类型。
  • 好的,很好理解,我该如何解决这个问题?

标签: asp.net sql-server entity-framework


【解决方案1】:

我以前见过这个,它与日期时间为空有关。我认为,如果您闯入代码,您会看到创建该类的新实例时的日期时间值是默认值(DateTime)而不是 null,正是这个值导致了错误。

如果可能,您可以在保存上下文更改之前尝试将 DateTime 值清空吗?

我将尝试整理一个示例,演示何时以及如何发生这种情况。

在这里找到一个简短的解释:

http://dotnetslackers.com/Community/blogs/bmains/archive/2010/11/19/entity-framework-4-and-quot-the-conversion-of-a-datetime2-data-type-to-a-datetime-data-type-resulted-in-an-out-of-range-value-quot.aspx

【讨论】:

  • 我按照建议将所有字段清空,并将数据库设置为 2005,它会中断:DatabaseAccess.Schema.Model1.ssdl(2,123):错误 0169:所有 SSDL 工件必须针对同一个提供程序。 ProviderManifestToken '2008' 与 '2005' 不同。我将它设置为 2008 并且它与正在使用的 SQL Server 版本不支持数据类型“datetime2”中断。
  • 我设法通过破坏整个业务逻辑项目并基本上重新编写所有数据库 BLL 来解决这个问题。一定是某个地方的小鬼
猜你喜欢
  • 2015-12-07
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多