1

Я создаю приложение 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 знать, что пользователи имеет другой Родитель ??? ... мне все равно?

Моя догадка заключается в том, что я должен делать это по-другому, более конкретным и точным.

+0

Не включайте ключевые слова в заголовок темы, вот для чего нужны теги. –

+0

Роджер, что. Благодарю. – Mattbob

+0

Это называется [полиморфными ассоциациями] (http://stackoverflow.com/questions/8895806/how-to-implement-polymorphic-associations-in-an-existing-database). Возможно, это даст вам подсказку, которая подходит вам лучше всего. –

ответ

0

В этом случае вы, вероятно, захотите добавить пользователя в таблицу Users, а не в магазины. Затем вы назначаете StoreID и UserTypeID пользователю перед фиксацией.

Похоже, вы уже устанавливаете StoreID в свой пользовательский интерфейс, вы делаете то же самое для UserType? Если это так, то просто добавьте пользователя в таблицу пользователей, и вы должны быть хорошими.

+0

Таким образом, это звучит так, как только я заполняю StoreID и UserTypeID в форме пользовательского интерфейса в пользовательской модели, тогда мои внешние ключи будут правильно установлены, и нет необходимости указывать родителя (будь то Store или UserType) в действии create ? – Mattbob

+0

@Mattbob - Это обычно, как это работает, да. Однако будьте осторожны, чтобы не переписывать типы хранилища. Я не уверен, где вы их настраиваете. –

+0

Я предполагаю, что это означает, что мне нужно указать StoreID и UserTypeID как {Foreign Key] в пользовательской модели. Круто. Препятствие успешно пройдено. – Mattbob