Справка по модели данных для класса администратора - PullRequest
0 голосов
/ 13 сентября 2011

Я пытаюсь построить модель данных, которую можно использовать с Entity Framework 4.1.

Я пытаюсь создать простое приложение для управления событиями (например, день рождения). Так что я полагаю, что у меня будет два типа пользователей: администраторы и помощники. Администраторы смогут создавать и управлять событием, а участники смогут просматривать только те события, на которые они приглашены.

Я думал, что мне нужно только 2 класса для этого, но я не уверен. Вот что я сделал для EF4.1

 public class user
     {
         public int id { get; set; }
         public string name { get; set; }
         public ICollection<myevent> myadminevents { get; set; }
         public ICollection<myevent> myinvites { get; set; }
     }

     public class myevent    {
         public int id { get; set; }
         public string name { get; set; }
         public ICollection<user> admin  { get; set; }
         public ICollection<user> attend { get; set; }
     }


     public class myeventcontext : DbContext
     {
         public DbSet<user> users { get; set; }
         public DbSet<myevent> events { get; set; }
     }

EF сделал не то, что я думал. Это игнорирование моих коллекций. Поэтому я не думаю, что модель правильная.

Есть предложения?

1 Ответ

1 голос
/ 13 сентября 2011

Вы можете смоделировать это с помощью двух соединительных таблиц и настроить отношения «многие ко многим», используя свободный API

public class myeventcontext : DbContext
{

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Entity<User>()
        .HasMany(user => user.myinvites).WithMany(event => event.attend)
            .Map(m =>
            {
                m.ToTable("EventAttendees");
                m.MapLeftKey("UserId");
                m.MapRightKey("EventId");
            });

        Entity<User>()
        .HasMany(user => user.myadminevents).WithMany(event => event.admin)
            .Map(m =>
            {
                m.ToTable("EventAdmins");
                m.MapLeftKey("UserId");
                m.MapRightKey("EventId");
            });
     }
}

Другой подход состоит в том, чтобы иметь одну таблицу соединений с дополнительным столбцом для хранения информации о том, является ли посетитель администратором или нет. Но таким образом вы не сможете смоделировать отношения «многие ко многим», не включив соединительную таблицу в качестве класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...