简体   繁体   English

EF 5代码优先播种自引用表

[英]EF 5 Code-First Seeding self referencing table

Here's my code: 这是我的代码:

base class: 基类:

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; }
}

user entity: 用户实体:

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; }

}

model creating: 模型创建:

    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);

    }

Seed: 种子:

    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 });

    }

and here's the error i encountered in the seed part: 这是我在种子部分遇到的错误:

{"Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values."} {“无法确定相关操作的有效顺序。由于外键约束,模型要求或存储生成的值,可能存在相关性。”}

what you have here is some sort of "chicken and egg" problem. 您在这里遇到的是某种“鸡肉和鸡蛋”问题。 Possible solutions: 可能的解决方案:

  • Make the foreign keys InsertUserID and UpdateUserID nullable 使外键InsertUserIDUpdateUserID可为空
  • Do a design change: Maybe the user table shouldn't have InsertUserID, UpdateUserID. 进行设计更改:也许用户表不应具有InsertUserID,UpdateUserID。 this could be solved by introducing another base class which doesn't have the InsertUserID and UpdateUserID properties or something similar 这可以通过引入另一个不具有InsertUserIDUpdateUserID属性或类似属性的基类来解决。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM