Rob*_*b L 5 c# entity-framework-5 visual-studio-2012
VS 2012(11.0.60315.01 Update 2),C#5,Entity Framework 5.0.0.0(Runtime v4.0.30319)
我知道过去曾发布类似的问题,但似乎没有答案.我想我理解错误,但我更感兴趣的是找到"理想的"解决方案. 我想要做的就是从Child表中删除一条记录. 有人可以帮忙吗?
这是一个完整而简单的例子.在调用SaveChanges()抛出以下异常:
"操作失败:由于一个或多个外键属性不可为空,因此无法更改关系.当对关系进行更改时,相关的外键属性将设置为空值. foreign-key不支持空值,必须定义新关系,必须为foreign-key属性分配另一个非null值,或者必须删除不相关的对象."
代码如下所示:
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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
数据库看起来像这样:
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)
Run Code Online (Sandbox Code Playgroud)
Parent表中有一条记录(Id = 1),Child表中有2条记录(Id为1和2).两个子记录都有ParentId = 1.
如果您只想删除子对象,则不应该在逻辑中关注父对象.试试下面的代码,让我知道会发生什么(未经测试).
using System.Linq;
namespace EFDeleteTest
{
class Program
{
static void Main(string[] args)
{
using (EFTestEntities context = new EFTestEntities())
{
var child = context.Children.Single(c => c.Id == 1);
context.Children.Remove(child);
context.SaveChanges();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11620 次 |
最近记录: |