我有一个列类型为datetime2的表(它是datetime,但我看到的EF适用于datetime2)。我已经将它设置为not null,并使用默认值SYSDATETIME()。为了正常工作,我将EF模型中映射到此列的属性设置为Computed。现在,当我没有在该属性中设置任何值时,我可以在表中看到notmal记录,但当我尝试从代码中设置值时,它会忽略它,并且在所有情况下都设置SYSDATETIME()。
当模型中的属性中没有值时,如何插入在DB中设置的默认值,如果不是null和set,则插入属性的值?
编辑:以下是示例代码
.....
ActionsJournal actionsJournalEntry =
TestFactory.CreateActionEntry(.....);
if (/* some condition */)
{
actionsJournalEntry.CreatedDate = DateTime.Now.AddDay(30); // else it will be null
}
ent.ActionsJournals.AddObject(actionsJournalEntry);
ent.SaveChanges();
....发布于 2011-08-17 15:40:32
简而言之:如果没有解决办法,这是不可能的。
您必须在数据库中设置StoreGeneratedPattern.Computed并始终设置值,或者必须在应用程序中设置StoreGeneratedPattern.None并始终设置值。不同的是,如果你设置了Computed,它永远不会在update或insert语句中传递你的值,而None总是传递它,即使你没有在默认日期1.1.0001中设置它= results,这也是为什么你认为EF使用DATETIME2的原因。
另一个问题是designer / EF中的设计缺陷,它不允许你为DateTime设置默认值。
解决方法:
在实体的自定义无参数构造函数中设置日期时间的默认值,并将StoreGeneratedPattern设置为None
public partial class ActionsJournal
{
public class ActionsJournal() {
CreatedDate = DateTime.Now.AddDay(30);
}
}现在,您的CreatedDate将始终具有默认值,除非您的应用程序或从数据库加载用其他值覆盖它。
https://stackoverflow.com/questions/7087949
复制相似问题