在我们的数据库中,每个表都有两个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]
吗?
答案 0 :(得分:8)
Identity
使用CreatedOn
,Computed
使用ModifiedOn
。 Identity
表示仅在插入期间设置值并将其返回给应用程序。在每次修改(包括插入)期间设置Computed
,并在每次执行插入或更新后将值返回给应用程序。
请注意,这些属性都不能在应用程序中设置。计算列也不能是主键或外键的一部分(不是你的情况)。
这仅适用于现有数据库。使用代码优先Computed
时,只能为timestamp
或rowversion
设置。
Timestamp
用于乐观并发。如果将列标记为时间戳,则每个更新都将包含条件WHERE timestampColum = @lastKnownValue
。仅当最后已知值与当前值相同时,它才会更新记录。如果值不同,您将获得异常。它通常与timestamp
SQL类型一起使用。与datatime
一起使用需要进行一些测试。 SQL数据时间的值与.NET中的值不同。