NDe*_*per 5 .net c# entity-framework
我有一个列类型为datetime2的表(它是日期时间,但我看到EF与datetime2一起工作).我将其设置为非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();
....
Run Code Online (Sandbox Code Playgroud)
简短的回答:如果没有解决方法,这是不可能的。
您必须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);
}
}
Run Code Online (Sandbox Code Playgroud)
CreatedDate现在,除非您的应用程序或从数据库加载用另一个值覆盖它,否则您将始终拥有默认值。