我应该如何使用EF 4.1注释CreatedOn和ModifiedOn列?

时间:2011-04-04 19:58:13

标签: entity-framework data-annotations entity-framework-4.1

在我们的数据库中,每个表都有两个DateTime列,CreatedOn和ModifiedOn,通过SQL Server中的触发器设置。在INSERT上设置CreatedOn,在INSERT和UPDATE上设置ModifiedOn。

我正在尝试使用Entity Framework 4.1。 我应该如何注释/配置这两个属性?

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

根据MSDN身份只是意味着The database generates a value when a row is inserted.,这似乎是真的。

另外,我应该使用[Timestamp]吗?

1 个答案:

答案 0 :(得分:8)

Identity使用CreatedOnComputed使用ModifiedOnIdentity表示仅在插入期间设置值并将其返回给应用程序。在每次修改(包括插入)期间设置Computed,并在每次执行插入或更新后将值返回给应用程序。

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

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

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