EF 5 Code-First播种自我参考表

时间:2014-03-24 08:33:52

标签: c# entity-framework ef-code-first

这是我的代码:

基类:

public class BaseEnt
{
    [Key]
    public int ID { get;set; }
    public DateTime InsertDate { get; set; }

    public int InsertUserID { get; set; }
    public DateTime UpdateDate { get; set; }
    public int UpdateUserID { get; set; }
    [Timestamp]
    public byte[] Timestamp { get; set; }

    public virtual User InsertUser { get; set; }
    public virtual User UpdateUser { get; set; }
}

用户实体:

public class User:BaseEnt
{
    public string Username { get; set; }
    public string Fullname { get; set; }

    public virtual ICollection<User> InsertedUsers { get; set; }
    public virtual ICollection<User> UpdatedUsers { get; set; }

}

模型创建:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>()
                     .HasRequired(t => t.InsertUser)
                     .WithMany(t=>t.InsertedUsers)
                     .HasForeignKey(t => t.InsertUserID).WillCascadeOnDelete(false);
        modelBuilder.Entity<User>()
                     .HasRequired(t => t.UpdateUser)
                     .WithMany(t=>t.UpdatedUsers)
                     .HasForeignKey(t => t.UpdateUserID).WillCascadeOnDelete(false);

    }

种子:

    protected override void Seed(MCFDataContext context)
    {
        context.Users.Add(new Entities.User {ID=1,Fullname="Rusty Boi ",Username="jhaskdhaksdhk",InsertUserID=1,UpdateUserID=1,UpdateDate=DateTime.Now,InsertDate=DateTime.Now });

    }

以及我在种子部分遇到的错误:

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

1 个答案:

答案 0 :(得分:0)

你在这里遇到的是某种“鸡蛋和鸡蛋”问题。可能的解决方案:

  • 将外键InsertUserIDUpdateUserID置为可空
  • 做一个设计更改:也许用户表不应该有InsertUserID,UpdateUserID。这可以通过引入另一个没有InsertUserIDUpdateUserID属性或类似属性的基类来解决