EF5 (コードファースト)。
デフォルト値GETDATE()を持つフィールドCreateDateがあり、値は挿入時に一度だけ設定されます。プロパティを 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を取得しますが、変更されず、挿入後も変更されません。
更新ごとに計算フィールド値の更新を無効にするにはどうすればよいですか?