0
我有一些多對多的關係,我試圖在實體框架中使用代碼優先的方法種子。只有最上面的層實際上正確地播種數據。用戶類正在播種,但底層的對象列表不是。是我波索的如下:複雜關係實體框架種子方法
public class User:Database
{
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 virtual List<Address> Addresses { get; set; }
public virtual List<UserRole> UserRoles { get; set; }
}
public class Address:Database
{
public String City { get; set; }
public String State { get; set; }
public int Zip { get; set; }
public String StreetAddress1 { get; set; }
public String StreetAddress2 { get; set; }
public int CountryID { get; set; }
public virtual Country Country { get; set; }
public int AddressTypeID { get; set; }
public virtual AddressType Type { get; set; }
}
public class UserRole:Database
{
public int UserID { get; set; }
public virtual User User { get; set; }
public int RoleID { get; set; }
public virtual Role Role { get; set; }
}
public class Role:Database
{
public String Name { get; set; }
}
public abstract class Database
{
public int ID { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
public Boolean IsActive { get; set; }
}
我已構建的種子的方法如下:
protected override void Seed(CodeFirstODS.DAL.DBContext.Context context)
{
// This method will be called after migrating to the latest version.
// You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data. E.g.
//
// context.People.AddOrUpdate(
// p => p.FullName,
// new Person { FullName = "Andrew Peters" },
// new Person { FullName = "Brice Lambson" },
// new Person { FullName = "Rowan Miller" }
// );
//
context.Users.AddOrUpdate(
u => u.ID,
new Models.User {
ID=1,
FirstName="James",
LastName = "Rainey",
UserName = "BloodyRu1n",
Password = "bobcat*",
Email = "[email protected]",
Addresses = new List<Models.Address>(){
new Models.Address(){
ID = 1,
StreetAddress1 = "1260 Monkey Knoll",
City = "Marietta",
State = "Geaorgia",
Country = new Models.Country(){
ID = 1,
Name = "USA",
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now,
IsActive = true
},
Type = new Models.AddressType(){
ID = 1,
Name = "Home",
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now,
IsActive = true
},
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now,
IsActive = true
}
},
UserRoles = new List<Models.UserRole>(){
new Models.UserRole(){
Role = new Models.Role(){
ID = 1,
Name = "Admin",
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now,
IsActive = true
}
},
new Models.UserRole(){
Role = new Models.Role(){
ID = 1,
Name = "Admin",
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now,
IsActive = true
}
},
},
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now,
IsActive = true
}
);//End User 1 Seed
context.SaveChanges();
}
再次將用戶數據在數據庫中正確地傳播,但是,對象的所有基礎列表不在數據庫中傳播。所有的桌子都如預期一般。 Context類如下。
public class Context:DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<UserRole> UserRoles { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<Address> Addresses { get; set; }
public DbSet<AddressType> AddressTypes { get; set; }
public DbSet<Country> Countries { get; set; }
}
數據庫就像這樣。
ID FirstName LastName UserName Password Email CreatedAt UpdatedAt IsActive
1 James Rainey BloodyRu1n bobcat* [email protected] 2013-07-04 19:34:46.767 2013-07-04 19:34:46.767 1
地址和其他對象表都沒有插入值。
任何幫助非常感謝!再次感謝你們。
,
Ĵ
這種方法運行良好。謝謝。關於這是否被認爲是最佳做法的任何想法? – user1345632
我喜歡它,因爲它非常模塊化,我可以輕鬆找到並更改特定表的種子。就最佳實踐而言,這似乎是[程序員堆棧交換](http://programmers.stackexchange.com/)的問題。 – holbrookbw1