【发布时间】:2018-09-25 15:49:05
【问题描述】:
public void getForm(string scode) {
Form result = DBContext.Forms.Where(f => f.Code == fCode && f.SCode == sCode).FirstOrDefault();
result.Products = result.Products.Where(p => p.Deleted== false).ToList(); // commenting this line fix the problem
return result;
}
我们如何将以上两行合并在一起以避免出现以下错误。
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
更新:
当在另一个函数中调用时,它会抛出上述错误
public void savetrans(string fcode)
{
Form form = GetForm(fCode);
var transDb = new DbContext.Data.Transaction()
{
FId = form.FId,
field1= "test",
field2= "test",
field3= "test",
};
DbContext.Transactions.Add(transactionDb);
DbContext.SaveChanges();
}
【问题讨论】:
-
您是否要删除已删除的产品?
-
Forms 中附加的产品很少,产品有状态(deleted, true, false),喜欢包含产品,但状态为deleted 的产品为false。效果很好...但是当我尝试为表单添加事务时,它会通过注释 result.products 行引发上述错误。那行得通,所以我相信它一定是它的加载方式,如果我以某种方式使用“包含”将两者结合在一起,它可能会解决关系问题。
-
如果您想获得没有删除产品的表格,您可以加入表格。如果要从数据库中删除已删除的产品,请选择它们并一一删除,然后保存数据上下文。
标签: c# entity-framework linq