У меня есть несколько-много отношений, в которых я пытаюсь использовать Seed, используя первый подход кода в Entity Framework. Только самый верхний слой фактически правильно загружает данные. Класс пользователя поселяется, но базовые списки объектов - нет. Мой Poco являются следующие:Сложные отношения Entity Framework Seed Method
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
Адреса и другие таблицы объектов не имеют вставленных значений.
Любая помощь очень ценится !! Еще раз спасибо ребятам.
,
J
Этот подход работал хорошо. Спасибо. Любые идеи о том, будет ли это считаться лучшей практикой? – user1345632
Мне это нравится, потому что он довольно модульный, и я могу легко найти и изменить семя для конкретной таблицы. Что касается лучшей практики, это похоже на вопрос для [Programmer Stack Exchange] (http://programmers.stackexchange.com/). – holbrookbw1