次の構造を持つ Code First EF 5.0 モデルがあります。
public class Widget
{
public virtual Int32 Id { get; set; }
public virtual String Name { get; set; }
}
public class Product
{
public virtual Int32 Id { get; set; }
public virtual ICollection<Widget> Widgets { get; set; }
public virtual AddWidget(Widget widget)
{
Guard.NotNull(widget);
if (Widgets == null)
{
Widgets = new List<Widget>();
}
Widgets.Add(widget);
}
}
Product
複数の追加された新しいトランジェントを保存しようとするとWidget
、最初にWidget
追加されたものだけが保存されます。
// ProductManagementContext is a DbContext
// ProductManagementContext.Products is a DbSet<Product>
using(var context = new ProductManagementContext())
{
var product = new Product();
product.AddWidget(new Widget() { Name = "Foo" } );
product.AddWidget(new Widget() { Name = "Bar" } );
context.Products.Add(product);
context.SaveChanges();
}
この時点で、テーブルには「Foo」のみが存在しWidget
ます。SQL Server Profiler を使用して、データベースに送られるデータを確認しましたが、2 つ追加されたコレクションINSERT
の最初のステートメントに対して 1 つのステートメントのみが発行されます。Widget
EF が両方の新しいエンティティでカスケードしないのはなぜですか?