6

私の EF5 コード ファースト モデルでは、データベースが主キーを設定すると、新しいレコードの作成がうまく機能します。主キーに Guid を使用しています。DatabaseGeneratedOption.Identityが設定されている場合、SQL Server は常にuniqueidentifier.

ただし、最初にデータベースをシードしようとすると、問題が発生します。シード メソッドで Guid を設定すると、SQL Server によってオーバーライドされます。Guid を設定しないと、毎回新しいレコードが取得されます。事前設定された Guid を使用してデータベースをシードDatabaseGeneratedOption.Identityし、通常の操作のために設定を維持するための推奨される解決策は何ですか?

クラス モデルの例:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public RecordName { get; set; }
public DateTime? Created { get; set; }
public DateTime? Updated { get; set; }

シード方法の例:

var record = new Record()
            {
                Id = new Guid("3B80725E-9550-4933-807F-C2FAA0942225"),
                RecordName = "New Record",
                Created = DateTime.UtcNow,
                Updated = DateTime.UtcNow,
             };
context.Record.AddOrUpdate(record);
context.SaveChanges();
4

1 に答える 1

8

AddOrUpdate には、キーを指定できるオーバーロードがあります

MSDNから

したがって、メソッドに自然キーを指定する必要があります。

context.Record.AddOrUpdate(c => c.RecordName, new Record()
            {
                RecordName = "New Record",
                Created = DateTime.UtcNow,
                Updated = DateTime.UtcNow,
             })
于 2013-07-18T09:08:03.723 に答える