关于这个主题有几个问题,但我的问题非常具体到真正的自我引用。其他问题的所有示例都是循环引用,在这种情况下对我没有帮助。
假设我有这个模型:
public class User
{
[Key]
public int Id { get; set; }
...
public int CreatedByUserId { get; set; }
}
和这张地图:
public class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
this.HasRequired(a => a.CreatedByUser)
.WithMany()
.HasForeignKey(u => u.CreatedByUserId);
}
}
在迁移使用此代码生成数据库后,我可以在 SQL Management Studio 中手动添加一个 ID = 1 和 CreatedByUserId = 1 的用户,这样就可以告诉我这样的自我引用可以工作。
但是,当使用 EF 创建用户时,我遇到了“无法确定相关操作的有效排序”问题。关于这个问题有很多问题涉及一个新实体,该实体引用另一个新实体,该实体在第一个实体上具有外键,这是一个循环引用。在这些情况下,解决方案是先保存一个实体,或者在循环实体外键上有一个可为空的 id。我不能做任何一个,因为第一个是不可能的,第二个是一个外部约束,我不能有可为空的 id。
因此,看看我如何通过手动添加条目来实现这一点,我可以假设这是 EF5 的限制。解决方法是什么?