C# EF 5代码优先播种自参考表
这是我的密码: 基类:C# EF 5代码优先播种自参考表,c#,entity-framework,ef-code-first,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; }
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; }
}
下面是我在种子部分遇到的错误:
{“无法确定依赖操作的有效顺序。依赖可能由于外键约束、模型要求或存储生成的值而存在。”}这里存在某种“鸡和蛋”问题。可能的解决办法:
- 使外键
和InsertUserID
可为空UpdateUserID
- 做一个设计更改:也许用户表不应该有InsertUserID,UpdateUserID。这可以通过引入另一个基类来解决,该基类没有
和InsertUserID
属性或类似属性UpdateUserID
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 });
}