私はEF CTP5 POCOを試しており、EF4 EntityModelからPOCOコードのみのアプローチに変換しています。
internal class InvoiceContext : DbContext
{
public DbSet<Invoice> Invoices {get; set;}
public DbSet<InvoiceLine> InvoiceLines {get; set;}
}
public class Invoice
{
public Guid InvoiceId { get; set; }
public virtual ICollection<InvoiceLine> Lines { get; set; }
}
public class InvoiceLine
{
public Guid InvoiceLineId { get; set; }
public Guid InvoiceId { get; set; }
public virtual Invoice Header { get; set; }
}
古いコードを EF4 モデルから POCO に変換すると、新しい請求書と行を追加することになっています。以前はマスター クラスを作成し、マスター クラス自体のインスタンスに詳細を追加していました。
var inv = new Invoice();
inv.InvoiceId = Guid.NewGuid();
var db = new InvoiceContext();
db.Invoices.Add(inv);
var invLine = new InvoiceLine();
invLine = InvoiceLineId = Guid.NewGuid();
inv.Lines.Add(invLine);
inv.Lines <== はこの時点で null であるため、InvoiceLines のコレクションを作成して設定することになっている請求書自体のインスタンスに行を追加することはできません。または、これを行う他の方法があります。
つまり、POCO コードのみ (CTP5) を使用してデータベースにマスター/詳細行を追加する方法を簡単に説明します。