即时播种和创建符合我的需求的数据库。 我有2个实体;用户和部门。 用户需要一个部门,而一个部门可以有很多用户,但同时部门需要一个用户作为其部门主管。 我可以弄清楚如何设置这个,每一次尝试都会导致各种异常。播种代码第一流利api数据库EF代码优先问题
这里是我的背景:
public class FravaerContext : DbContext
{
public FravaerContext() : base("name=DefaultConnection")
{
Database.SetInitializer(new DBInitializer());
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().HasRequired<Department>(u => u.Department).WithMany(d => d.Users).WillCascadeOnDelete(false);
modelBuilder.Entity<Department>().HasRequired(d => d.DepartmentChief);
//modelBuilder.Entity<Absence>().HasRequired<User>(a => a.User).WithMany(u => u.Absences).WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
public DbSet<Absence> Absences { get; set; }
public DbSet<Department> Departments { get; set; }
public DbSet<User> Users { get; set; }
}
public class DBInitializer : DropCreateDatabaseAlways<FravaerContext>
{
protected override void Seed(FravaerContext context)
{
for (int i = 1; i <= 4; i++)
{
User chief = new User() {Id = i, Absences = new List<Absence>(), Email = $"chief{i}@chief.dk", FirstName = $"Chief{i}",LastName = $"Chiefsen{i}",Password = "admin",UserName = ""+i,Role = Role.DepartmentChief};
Department d = new Department() {Id = i, Users = new List<User>() { chief }, DepartmentChief = chief };
chief.Department = d;
context.Departments.Add(d);
}
base.Seed(context);
}
}
而且我实体(AbstractEntity只提供ID来实体类):
public class Department : AbstractEntity
{
public List<User> Users { get; set; }
public User DepartmentChief { get; set; }
}
public class User : AbstractEntity
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public List<Absence> Absences { get; set; }
public Department Department { get; set; }
public Role Role { get; set; }
}
你为什么不在'Seed'方法中调用'SaveChanges'? –
我不需要。我现在工作,我从来没有使用保存更改:) – Bille