【发布时间】:2013-04-10 05:56:11
【问题描述】:
这是我的课
public class Employee
{
public virtual List<Salary> Salaries { get; set; }
public bool CanAddSalary(Salary salary)
{
var count = (from x in Salaries where x.Month == salary.Month
&& x.Year == salary.Year select x).Count();
return count == 0;
}
public void AddSalary(Salary salary)
{
if(CanAddSalary(salary))
{
Salaries.Add(salary);
}
}
}
- Entity Framework 加载具有 Salaries 属性的 Employee。
- CanAddSalary 方法只是检查以避免重复(没有修改 Salaries Collection 对吗?)。
- 如果 CanAddSalary 返回 true,则调用 AddSalary 方法。
- 我调用 Entity Framework Context.SaveChanges() 并抛出异常。
【问题讨论】:
-
请重新定义措辞,它令人困惑。
-
你得到了什么异常?
-
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
-
您确定您所概述的是唯一正在执行的事情吗,当您从集合中删除某些东西但关系不是时,这种异常通常会发生设置为级联删除或外键不可为空。因此,已“删除”的对象将保留在 db 中,带有“集合”对象的 NULL 外键 - 您的 db 不会“一致”,因此 EF 会引发异常。答案 - 将外键标记为 Nullable 或设置级联删除或将“子”添加到另一个“集合”,从而将外键设置为新值而不是 null
-
(Ran out of chars) .. 您选择哪个选项取决于正在运行的其他内容,上面显示的代码(单独)不能产生您的异常重新描述。
标签: linq collections entity-framework-5