首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >datetime2默认值,实体框架

问datetime2默认值,实体框架
EN

Stack Overflow用户
提问于 2011-08-17 12:27:32
回答 1查看 2.7K关注 0票数 5

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

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

编辑:以下是示例代码

代码语言:javascript
复制
.....
ActionsJournal actionsJournalEntry =
 TestFactory.CreateActionEntry(.....);

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

ent.ActionsJournals.AddObject(actionsJournalEntry);

ent.SaveChanges();
....
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
复制
public partial class ActionsJournal 
{
    public class ActionsJournal() {
        CreatedDate = DateTime.Now.AddDay(30);
    }
}

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7087949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档