【问题标题】:How do I tell Entity Framework to allow SQL Server to provide a defined default value for a field?如何告诉 Entity Framework 允许 SQL Server 为字段提供已定义的默认值?
【发布时间】:2012-06-25 18:05:34
【问题描述】:

当向表中添加新行时,我使用以下 SQL 脚本启用在字段中设置当前时间:

ALTER TABLE [Items] ADD CONSTRAINT DF_Items DEFAULT GETDATE() FOR [CreationDate]

现在我正在使用 Entity Framework 来处理这个表,并向它添加新行。我想要做的是允许该特定列从 SQL Server 本身接收其值,而不必自己提供该值。 在 Visual Basic 中将该特定列的值设置为 Nothing 会用 DateTime.MinValue 填充该字段,这不是我想要的(顺便说一下,SQL Server 不支持)。

我必须进行哪些更改才能完成这项工作?

【问题讨论】:

  • 从实体框架更改为明智的解决方案 :) 呵呵
  • 安多马尔,这将是一个非常戏剧性的变化。我在找一个更小的!

标签: sql-server entity-framework default-value


【解决方案1】:

对于该日期属性,您必须在 EDMX 设计器中将 StoreGeneratedPattern(或代码优先中的 DatabaseGeneratedOption)设置为 Identity。 EF 始终为未填充的属性发送 .NET 默认值,该属性不是存储生成的。将模式设置为 Identity 将告诉 EF 在插入期间在 DB 中生成值,并且它将重新查询其值。如果您从默认值更改模式,您将无法在应用程序中设置该属性。

【讨论】:

  • 是的,这应该可以解决问题。但不幸的是,尽管我将 StoreGeneratedPattern 设置为 Identity,但我再次遇到了同样的异常。异常再次告诉我 SQL 不能接受 #12:00:00 AM# 作为有效值,这意味着 EF 仍在将 .NET 默认值发送给 SQL。还有什么需要注意的吗?
  • 以 XML 格式打开 EDMX 文件,并检查映射文件的 CSDL 部分和 SSDL 部分中的模式是否正确设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 2012-01-23
相关资源
最近更新 更多