EF:对创建的日期属性使用默认值是否可以?

时间:2016-11-03 21:35:18

标签: c# entity-framework

我想在插入新行时将CreatedDate列设置为当前日期时间,所以我这样做:

public DateTime CreateDate { get; set; } = DateTime.Now;

我测试了它并且工作得很好,这是一种实用的方法吗?我看到很多文章用如此多的代码和使用流畅的API实现相同的功能,没有人提到过这个简单的方法吗?

2 个答案:

答案 0 :(得分:3)

这取决于你想要完成的事情。

  

我看到许多文章使用流畅的API,

来实现相同的代码

这些文章中的大多数都是关于在数据库级别添加默认值。你不是那样做的。如果使用纯SQL在表中插入一行,并且没有为CreatedDate指定值,则会收到错误。

使用您正在执行的操作,在插入时始终需要在SQL中指定CreatedDate。但实体框架在插入时始终在SQL中指定它,并完全忽略在数据库级别设置的任何默认值。

所以,如果这就是你想要的 - 只有在通过C#创建对象时才会应用默认值 - 那么你所做的就完全没问题了。它也可以写成从类的构造函数中设置值。

@Alex Kozlowski提出了一个很好的评论,即DateTime.Now可能不是您期望插入的值。这取决于运行代码的系统。时区可能与您的服务器不同,或者时钟可能不同步。

答案 1 :(得分:1)

是。此功能已在c#版本6中添加。这仅适用于c#-6。这就是为什么你在许多文章中都找不到它的原因。