【问题标题】:Default value is not written when using Entity Framework使用实体框架时不写入默认值
【发布时间】:2012-12-26 03:32:04
【问题描述】:

我有一个简单的表,其中包含 ID、REGDATE 和 EVENT_NAME 列。我已将 SYSDATE 设置为 REGDATE 列的默认值。如果我从 SQL Developer 插入一条记录,当前日期将写入 REGDATE 列。但是,如果我插入一条带有 Entity Framework REGDATE 列的记录有 NULL。使用实体框架时数据库默认值不工作吗?我该怎么办?

【问题讨论】:

  • 在 Sql 中,如果您未在插入语句中指定列,您的默认值只会插入到 REGDATE 列中。如果您查看 EF 在插入您的值时生成的查询,很可能指定 null 应该插入到列中,这就是您没有得到默认值的原因。根据我的阅读,EF 不支持 SQL 默认值。 IronMan 的解决方案是我见过的最干净的解决方案。
  • 另外,如果字段不为空,MS SQL 只会在字段中插入默认值。可空字段不使用默认值。首先,数据库列必须不为空。

标签: oracle entity-framework default-value


【解决方案1】:

你可以设置属性,StoreGeneratedpatternComputed 然后 EF 不会更新它,但你也不能。此方法将解决您的 Db 默认列。

【讨论】:

  • OP 从未说过他想通过 EF 保持这个价值。所以我明确表示使用这种方法有它的缺点。
  • 您的建议确实符合我的需要,因为我需要编写的默认值永远不会再更改。但我仍然看不到写入列的默认值。
  • 应该工作 (stackoverflow.com/q/5042327/1099260)。如果你不能让它工作,那么使用 IronMan 的解决方案。如果您不希望任何人能够通过 EF 显式设置该值,我认为您可以通过 EF 设计器将属性的 Setter 访问修饰符从 public 更改为 internalprivate - 这样防止更新(通过实体)该字段。
  • 因为 getdate() 是不确定的(为每次调用提供不同的值)它不能被持久化(保存),所以我希望它总是返回当前的日期时间。
【解决方案2】:

您可以做到这一点的一种方法是在您的类中使用构造函数来在您实例化该类型的新对象时自动设置该默认值。这类似于拉迪斯拉夫对this SO question 的回答。

【讨论】:

  • 要使用 SQL 服务器默认值,SQL 字段必须是not null,否则 SQL 会插入空值。要让实体框架插入 SQL 服务器默认值,EF 必须为该字段提交一个空值。这不禁要问,即使数据库字段不为空,EF 实体是否必须将该字段定义为可为空,以便 EF 为 SQL 服务器默认应用提交空值?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 2012-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多