.NET 4、MVC 4、Entity Framework 5、SQL Server を使用。
1 つのトランザクションに新しいヘッダー レコードと、挿入されたヘッダー レコードへの外部キーを持ついくつかの新しい HeaderData レコードを挿入したいと考えています。ヘッダー レコードには Identity int 主キーがあります。
Entities.Header h = new Entities.Header();
h.Name = name;
h.Time = DateTime.Now;
h.Comments = comments;
db.Headers.Add(h);
// db.SaveChanges(); // Save changes here?
// and get ID to use below via h.ID?
foreach (DataRecord dr in datarecords) // my own custom types here
{
Entities.HeaderData hd = new Entities.HeaderData();
// hd.header = thisid // ?? this is the FK to Header.ID, its Identity int PK
hd.name = dr.name
hd.value = dr.value
db.HeaderDatas.Add(hd)
}
db.SaveChanges(); // or wait to save all here?
問題は、ヘッダー レコード ID がコミットされるまで、データ レコードの FK フィールドに入れられるものがわからないことです。それとも私ですか?SaveChanges/Commit が機能しない前に h.ID を参照するだけで、0 が返されました。
オプション: 1) 最初にヘッダー レコードをコミットし、使用する PK を取得してから、データ レコード モデルを入力し、それらを個別にコミットする必要がありますか? そのような場合、ヘッダーのロールバックを行う必要があるかもしれませんが、最適な方法とは言えません。
2) 代わりに GUID PK などを使用する必要がありますか? ここでアプリで作成しますか? とにかくそこからレコードを追加できる唯一の場所です。
3) Entity Framework (一時的な EntityKey でしょうか?) に巧妙な方法がありますか? データ レコードの FK フィールドに正しいヘッダー ID を自動的に配置するように、トランザクションを挿入しますか? これは EF で実行できるようですが、それへの参照を正確に見つけることができませんでした。