EF5(代码优先)。
我有一个字段CreateDate,它有一个默认值GETDATE(),值设置只有一次 - 在插入时。如果我将属性标记为DatabaseGenerated(DatabaseGeneratedOption.Computed) - EF会在每次更新任何其他字段时更新其值。我怎么能防止这种行为?只有在插入后才能获取生成的值,但不是每次更新后都需要...
[Table("Users")]
public class EFUser
{
[Key]
public int ID { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreateDate { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
[Required]
[StringLength(50)]
public string LoginName { get; set; }
[Required]
[StringLength(50)]
public string PasswordHash { get; set; }
}
查看下面的示例 - 插入新记录,并更新名称字段:
exec sp_executesql N'insert [dbo].[Users]([Name], [LoginName], [PasswordHash])
values (@0, @1, @2)
select [ID], [CreateDate]
from [dbo].[Users]
where @@ROWCOUNT > 0 and [ID] = scope_identity()',N'@0 nvarchar(50),@1 nvarchar(50),@2 nvarchar(50)',@0=N'6adbf8ac-8332-40a5-8e38-369f938867b1',@1=N'689950801',@2=N'291FD051'
go
exec sp_executesql N'update [dbo].[Users]
set [Name] = @0
where ([ID] = @1)
select [CreateDate]
from [dbo].[Users]
where @@ROWCOUNT > 0 and [ID] = @1',N'@0 nvarchar(50),@1 int',@0=N'6af61beb-2583-4f2d-8a7c-b3a03ca3b082',@1=29
go
第一次,在插入之后,EF获取生成的ID和CreateDate值 - 这没关系。 但是在更新Name ... EF后再次获取CreateDate,但它没有改变,从不在插入后。
如何在每次更新时禁用更新计算字段值?