管理员类的数据模型帮助

时间:2011-09-12 20:18:31

标签: asp.net-mvc entity-framework-4

我正在尝试构建一个可以与Entity Framework 4.1一起使用的数据模型。

我想建立一个简单的应用程序来管理事件(比如生日聚会)。所以我想我会有两种类型的用户,Admins和Attenders。管理员将能够创建和管理活动,参与者只能查看他们被邀请参加的活动。

我以为我只需要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 个答案:

答案 0 :(得分:1)

您可以使用两个联结表对此进行建模,并使用Fluent 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");
            });
     }
}

其他方法是使用单个联结表和附加列来存储与会者是否是管理员。但是,通过这种方式,如果不将联结表作为一个类包含在内,您将无法建立多对多关系。