我的数据库中有两个表,分别名为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设计器中修改两个实体之间关系的属性。