3

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 值——没关系。但是在更新名称之后... EF 再次获取 CreateDate,但它没有改变,插入后从未改变。

如何在每次更新时禁用更新计算字段值?

4

0 回答 0