实体框架:计算字段,仅在插入时从DB获取...如何?

时间:2013-08-21 19:26:41

标签: entity-framework-5 calculated-columns

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,但它没有改变,从不在插入后。

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

0 个答案:

没有答案