VS 2012(11.0.60315.01 更新 2),C# 5,实体框架 5.0.0.0(运行时 v4.0.30319)
我知道过去曾发布过类似的问题,但似乎没有答案。我想我理解这个错误,但我更感兴趣的是找到“想要的”解决方案。 我要做的就是从子表中删除一条记录。 任何人都可以帮忙吗?
这是一个完整而简单的例子。SaveChanges()抛出以下异常:
“操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性设置为空值。如果外键不支持空值,必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。”
代码如下所示:
using System.Linq;
namespace EFDeleteTest
{
class Program
{
static void Main(string[] args)
{
using (EFTestEntities context = new EFTestEntities())
{
var parent = context.Parents.Single(p => p.Id == 1);
var child = parent.Children.Single(c => c.Id == 1);
parent.Children.Remove(child);
context.SaveChanges(); // Throws the above Exception
}
}
}
}
数据库如下所示:
Parent
Id (PK, int, not null) IDENTITY
Name (nvarchar(50), null)
Child
Id (PK, int, not null) IDENTITY
ParentId (FK, int, not null) -- Foreign Key to the Parent Table (Id column))
Name (nvarchar(50), null)
Parent 表中有 1 条记录(Id = 1),Child 表中有 2 条记录(Id 的 1 和 2)。两条子记录的 ParentId = 1。