我在1..*
和X
之间有Y
个关系,其中X
是父级。当我尝试删除记录Y
时,我收到以下异常消息:
' Y'中的实体参加' FK_Y_X'关系。 0相关' X'被找到。 1' X'是预期的。
我目前正尝试以下列方式以通用的,断开连接的方式删除记录:
public bool Delete(TEntity entity)
{
if (entity == null)
{
return false;
}
try
{
var entry = _context.Entry(entity);
entry.State = EntityState.Deleted;
_context.SaveChanges();
return true;
}
catch
{
return false;
}
}
传入的实体在同一上下文中加载了AsNoTracking()
。
有什么想法吗?
答案 0 :(得分:5)
尝试将公共属性YId添加到X,它将保存与Y的连接, 这解决了我的问题,我使用Breeze与EF6,我也有同样的错误。
Class Y
{
public int Id { get; set; }
public ICollection<X> Xs { get; set; }
}
Class X
{
public int Id { get; set; }
public int YId { get; set; }
public Y Y { get; set; }
}
答案 1 :(得分:4)
当context.Y.Attach(x);
确保对象x
为父实体保存“Id”时。你需要两者。
示例:
x.Id = 3;
x.ParentEntity.Id = 10;
这至少解决了我的问题。我忘记了附加对象中的父ID。
答案 2 :(得分:0)
也许您必须在父实体(X)上允许NULL值,或者如果您不再使用它,则删除该实体
答案 3 :(得分:0)
对我来说,我的数据库中的记录有问题的 FK 列的 NULL 值。我用有效值填充了该列,并且可以通过 EF Remove 方法删除该记录。