3

ここで説明する方法を使用して、親レコードと関連するすべての子レコードを削除しようとしています。ただし、親は期待どおりに削除されますが、子レコードのキーフィールドは削除されずにNULLに更新されます。

また、子テーブルの外部キーの削除ルールをカスケードに設定し、SQL Server Managementの親テーブルから削除すると、期待どおりにカスケード削除が実行されます。

私はこのウォークスルーに従い、削除を実行するようにコードを変更することから始めました。

これはコードです:

 using (var db = new ProductContext())
 {
     var food = db.Categories.Find("FOOD");
     ((IObjectContextAdapter)db).ObjectContext.LoadProperty(food, f => f.Products);

     db.Categories.Remove(food);
    int recordsAffected = db.SaveChanges();

足りないものはありますか?または、孤立した子は意図した結果を記録しますか?

4

1 に答える 1

2

Product.CategoryIdProductクラス(ie )の外部キープロパティがnull許容型(ie )であるため、ProductとCategoryの関連付けはオプションとして構成されていますstring。親を削除した結果として子エンティティが削除されるようにこの関連付けを必須にするには、次のコードで行ったようにマークCategoryIdを付ける必要があります。Required

public class Category
{
    public string CategoryId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Product> Products { get; set; }
}

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }

    [Required]
    public string CategoryId { get; set; }
    public virtual Category Category { get; set; }
}
于 2011-01-24T18:10:42.280 に答える