' Y'中的实体参加' FK_Y_X'关系。 0相关' X'被找到。 1' X'是期待

时间:2014-07-14 09:46:14

标签: c# generics entity-framework-6

我在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()

有什么想法吗?

4 个答案:

答案 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 方法删除该记录。