Entity Framework外键InvalidOperationException

3
有没有办法在调用SaveChanges()时出现InvalidOperationException这样的异常时输出更多的详细信息?

操作失败:由于一个或多个外键属性是非空的,因此无法更改关系。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,将外键属性分配另一个非空值,或删除不相关的对象。

我没有从数据库中删除任何内容,因此类似于这个问题的问题并没有帮助我。消息本身已经很清楚,但是我无法看到代码中的错误,如果异常提供有关哪个属性和哪个外键有疑问的更多信息,那就会很有帮助。
编辑-我检查了InnerException,它是空的。

当我遇到这种情况时,我从表中删除了外键约束并将默认值设置为我知道不会出现的值。当我执行插入操作时,只需检查表中是否有错误即可。 - Jacob Lambert
当删除实体时,这并不总是发生,您可以从多对多集合属性中删除它们并获得相同的错误。 - danludwig
1个回答

2
例如,如果您有以下结构:
  public class Client
  {
     public int ClientID { get; set; }
     public string Name { get; set; }

     public int ClientTypeID { get; set; }
     public ClientType ClientType { get; set; }
  }

  public class ClientType
  {
     public int ClientTypeID { get; set; }
     public string Description { get; set; }
  }

如果您要更改“名称”属性,例如,您的“ClientType”属性必须为null,否则它将尝试创建、更新或删除您的客户端类型。因此,在SaveChanges()之前,将ClientType设置为null即可。如果您发布更多代码,我们可以确定发生了什么事情,但这只是我的猜测。

1
谢谢你的回答。我追踪到问题出在Automapper在集合中对我的模型进行了一些意外操作,所以EF不喜欢那样做。 - Igor Ralic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接