datetime2默认值,实体框架

时间:2011-08-17 04:27:32

标签: c# .net entity-framework

我有一个列类型为datetime2的表(它是datetime,但我看到的是与datetime2一起使用的EF)。 我将其设置为非null并且默认值为SYSDATETIME()。为了正常工作,我设置了在EF模型中映射到此列的属性Computed。现在,当我没有在该属性中设置任何值时,我可以在表中看到非正式记录,但是当我尝试从代码中设置值时,它会忽略它,并且在所有情况下都设置SYSDATETIME()

当模型中的属性中没有值时,如何插入在DB中设置的默认值,如果该属性的值不为null,则如何设置?

编辑:这是示例代码

.....
ActionsJournal actionsJournalEntry =
 TestFactory.CreateActionEntry(.....);

if (/* some condition */)
{
  actionsJournalEntry.CreatedDate = DateTime.Now.AddDay(30); // else it will be null
}

ent.ActionsJournals.AddObject(actionsJournalEntry);

ent.SaveChanges();
....

1 个答案:

答案 0 :(得分:4)

简短回答:没有解决方法是不可能的。

您必须设置StoreGeneratedPattern.Computed并始终在数据库中设置值,或者必须设置StoreGeneratedPattern.None并始终在应用程序中设置值。不同之处在于,如果设置Computed,它永远不会在更新或插入语句中传递您的值,而None总是将它传递给它,即使您没有设置它=结果默认日期为1.1.0001并且您认为EF使用DATETIME2

的原因

另一个问题是设计师/ EF中的设计缺陷,它不允许您为DateTime设置默认值。

解决方法:

在实体的自定义参数较少构造函数中设置日期时间的默认值,并将StoreGeneratedPattern设置为None

public partial class ActionsJournal 
{
    public class ActionsJournal() {
        CreatedDate = DateTime.Now.AddDay(30);
    }
}

现在,除非您的应用程序或从数据库加载,否则您的CreatedDate将始终具有默认值。

相关问题