Я создаю приложение MVC3 asp.net с использованием Entity Framework 4 и C#.Несколько родительских моделей для дочерней модели
Я попытался прочитать EF и привязку модели, ленивую загрузку и т. Д. Но я ударил препятствие.
У меня есть модель пользователя. Модели Store и UserType могут иметь ICollection of Users. Когда я добавляю пользователя с помощью действия «Создать действие», как указать несколько родителей?
Я думаю, что знаю только, как добавить, если есть один родитель.
Мои модели:
public class UserType
{
public virtual int ID { get; set; }
public virtual string UserTypeName { get; set; }
public virtual ICollection<User> Users { get; set; }
}
public class Store
{
public virtual int ID { get; set; }
public virtual string StoreName { get; set; }
public virtual Address StoreAddress { get; set; }
public virtual ICollection<Workroom> Workrooms { get; set;}
public virtual ICollection<User> Users { get; set; }
}
public class User
{
public virtual int ID { get; set; }
public virtual string Username { get; set; }
public virtual string Email { get; set; }
public virtual Store Store { get; set; }
public virtual UserType UserType { get; set; }
}
Вот мой дб контекст:
public DbSet<Workroom> Workrooms { get; set; }
public DbSet<Ticket> Tickets { get; set; }
public DbSet<Customer> Customers { get; set; }
public DbSet<Store> Stores { get; set; }
public DbSet<User> Users { get; set; }
public DbSet<UserType> UserTypes { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Store>()
.HasMany(store => store.Workrooms)
.WithRequired(workroom => workroom.Store);
modelBuilder.Entity<Store>()
.HasMany(store => store.Users)
.WithRequired(user => user.Store);
modelBuilder.Entity<UserType>()
.HasMany(usertype => usertype.Users)
.WithRequired(user => user.UserType);
base.OnModelCreating(modelBuilder);
}
Вот мой создать действие:
public ActionResult Create()
{
return View(new User());
}
//
// POST: /Users/Create
[HttpPost]
public ActionResult Create(User newUser)
{
try
{
int storeID = newUser.Store.ID;
var store = _db.Stores.Single(r => r.ID == storeID);
store.Users.Add(newUser);
_db.SaveChanges();
return RedirectToAction("Index");
}
catch (Exception ex)
{
ModelState.AddModelError("", ex.InnerException.Message);
return View();
}
}
ли я просто добавить еще один "Добавить" призыв к UserType ? например: INT userTypeID = newUser.UserType.ID вар UserType = _db.UserTypes.Single (ы => s.ID == userTypeID)
Как бы Entity Framework знать, что пользователи имеет другой Родитель ??? ... мне все равно?
Моя догадка заключается в том, что я должен делать это по-другому, более конкретным и точным.
Не включайте ключевые слова в заголовок темы, вот для чего нужны теги. –
Роджер, что. Благодарю. – Mattbob
Это называется [полиморфными ассоциациями] (http://stackoverflow.com/questions/8895806/how-to-implement-polymorphic-associations-in-an-existing-database). Возможно, это даст вам подсказку, которая подходит вам лучше всего. –