无法确定相关操作的有效排序

Tom*_*ith 24 entity-framework

这是我的模特

public string Content { get; set; }

public Faq Reply { set; get; }

public int? ReplyId { get; set; }

public ICollection<Faq> Children { get; set; }

[ForeignKey("WriterId")]
public virtual UserProfile Writer { get; set; }

public virtual int? WriterId { get; set; }

public Status Status { get; set; }

[ForeignKey("DepartmentId")]
public virtual Department Department { get; set; }

public virtual int? DepartmentId { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是我的错误

无法确定相关操作的有效排序.由于外键约束,模型要求或存储生成的值,可能存在依赖关系.

Tob*_*san 11

另一个可能的原因是外键属性设置不正确.

例如,在以下情形中可能会发生这种情况:

  1. DepartmentId设置为零或任何其他不是有效外键的值.
  2. Department为null或者是Department对象,其对象包含其自己的DepartmentId属性的空值.
  3. 此配置将导致实体框架失败,因为它尝试查找主键为零的部门,该部门可能不存在.

当我将一个对象映射到另一个对象并且错误地将外键设置为零而不是将其设置为null时,我遇到了这个异常.

我不能说这个配置是导致你的异常而没有看到属性的实际值,但它是一种可能性.


Nat*_*ips 6

避免此错误的简单方法是首先创建主对象 SaveChanges,然后在再次调用 SaveChanges 之前创建依赖对象。

在本例中,首先创建上面显示的对象 SaveChanges,然后创建 Faq 子对象,将其添加到集合中并将其设置为 Reply,然后再次设置 SaveChanges。

  • 在这种情况下,他会丢失单个“SaveChanges()”调用的事务方面。 (35认同)
  • 我想这是一种修复它的方法,但是调用 SaveChanges 意味着两个数据库事务并且违背了 ACID 原则的 A(原子性)。不过,这是一种解决办法,我现在也走了这条路。谢谢。我的一分。 (2认同)

小智 5

FWIW,我刚刚花了一个早上在 EF 6.1 中调试类似的问题。就我而言,这是由于意外地混合了不同上下文拥有的对象:在一个上下文拥有的对象和另一个上下文拥有的对象中设置导航属性的值。