我的数据库中有两个表,分别名为Vendors和VendorPriceBreaks:

Vendors
-----------------
VendorID (PK)
Name

VendorPriceBreaks
-----------------
VendorPriceBreakID (PK)
VendorID (FK)
Price


删除供应商时,我也想删除与其关联的所有VendorPriceBreaks。我正在使用实体框架。

我首先尝试了这个:

public RedirectToRouteResult Delete(int id)
{
    MyEntities entities = new MyEntities();

    var vendor = entities.Vendors.FirstOrDefault(v => v.VendorID == id);
    entities.Vendors.Context.DeleteObject(vendor);
    entities.Vendors.Context.SaveChanges();

    return RedirectToAction("Index");
}


这给了我错误消息:DELETE语句与REFERENCE约束“ FK_VendorPriceBreaks_Vendors”冲突

因此,在删除对象之前,我添加了以下行:vendor.VendorPriceBreaks.Clear();

但是随后我收到此错误消息:操作失败:由于一个或多个外键属性不可为空,因此无法更改关系。对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

最好的方法是什么?

最佳答案

您可以“包括”您的子实体。

var vendor = entities.Vendors
                     .Include("VendorPriceBreaks")
                     .FirstOrDefault(v => v.VendorID == id);


或者,您可以在.edmx设计器中修改两个实体之间关系的属性。

09-07 00:35