我正在尝试构建一个可以与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并没有做我想的那样。它忽略了我的收藏品。所以我不认为模型是对的。
有什么建议吗?
答案 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");
});
}
}
其他方法是使用单个联结表和附加列来存储与会者是否是管理员。但是,通过这种方式,如果不将联结表作为一个类包含在内,您将无法建立多对多关系。