0

它是正确的,因为我不完全理解,但我已经有几天了这些问题。

我有一个日期时间字段并使用实体框架。

场景:

  1. 当我设置要计算的字段(数据库生成选项)时,我无法像这样更新字段:

        db.ComputeUnites.Find(this._ComputeGuid).HeartBeat = DateTime.UtcNow;
        db.SaveChanges();
    
  2. 当我不将其设置为计算时,并将其设置为必需。当我尝试添加未设置字段的新元素时出现错误。(这是有道理的,但我已经在服务器上设置了默认值以将其设置为 ( getutcdate()) - 所以我希望它在未设置时会启动。

  3. 我尝试将其设置为可选并再次使用默认值,然后我可以添加新对象,但不使用默认值,而是插入 0:0:0 00:000(不正确记住语法)时间.

我想要的是:当我没有在新添加的对象上设置字段时,应该使用默认值。如果我提供或更新该字段,它应该使用来自我的 c# 类的值。

我错过了什么?

4

1 回答 1

1

我想要的是:当我没有在新添加的对象上设置字段时,应该使用默认值。如果我提供或更新该字段,它应该使用来自我的 c# 类的值。

这是不支持的。您可以让它存储生成,EF 将使用数据库中设置的值,但从不使用应用程序中设置的值,或者您可以让它生成应用程序,EF 永远不会使用数据库中的默认值,因为它始终具有默认值您发送到服务器的应用程序。

最简单的解决方法是直接在应用程序中设置正确的默认值,不要使用数据库默认值并存储生成模式:

public class ComputeUnit {
    ...

    public ComputeUnit() {
        HeartBeat = DateTime.UtcNow;
    }

    ...
}
于 2012-10-29T08:50:18.140 回答