4

在我们的数据库中,每个表都有两个DateTime列CreatedOn和ModifiedOn,通过SQL Server中的触发器进行设置。 CreatedOn在INSERT上设置,ModifiedOn在INSERT和UPDATE上设置。我应该如何使用EF 4.1注释CreatedOn和ModifiedOn列?

我想使用实体框架4.1。 我应该如何注释/配置这两个属性?

我认为它涉及注释[DatabaseGenerated(DatabaseGeneratedOption.Computed)],但是我应该使用该注释还是应该在CreatedOn字段上设置[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

根据MSDN身份简单地暗示The database generates a value when a row is inserted.,这在这里似乎是真的。

另外,我应该使用[Timestamp]

回答

8

使用Identity代替CreatedOnComputed代替ModifiedOnIdentity表示该值仅在插入过程中设置并返回到应用程序。 Computed在每次修改(包括插入)期间都会被设置,并且在每次执行插入或更新后,都会将值返回给应用程序。

请注意,这些属性都不能在应用程序中设置。计算列也不能是主键或外键的一部分(它不会是你的情况)。

这只适用于现有的数据库。当使用代码优先Computed只能设置为timestamprowversion

Timestamp用于乐观并发。如果您将某一列标记为时间戳,则每个更新将包含条件WHERE timestampColum = @lastKnownValue。只有当最后一个已知值与当前值相同时,它才会更新记录。如果值不同,您将得到一个异常。它通常与timestamp SQL类型一起使用。使用它与datatime将需要一些测试。 SQL数据时间的值与.NET中的值不同。

+0

这就是它的样子,谢谢。那么[时间戳]呢?那会有什么影响? – 2011-04-04 20:59:55

+0

@Scott:我添加了一些关于时间戳的细节 – 2011-04-04 21:05:31

+0

非常感谢。很好的答案! – 2011-04-04 21:08:07

相关问题