我设置了这两个类,并且我希望Entity Framework自动为实体集创建生成的多对多关系表。
public class User {
public int Id { get; set; }
public ICollection<Event> SignedUpEvents { get; set; }
public ICollection<Event> CompletedEvents { get; set; }
}
和
public class Event {
public int Id { get; set; }
public ICollection<User> SignedUpUsers { get; set; }
public ICollection<User> CompletedUsers { get; set; }
}
这没有任何作用。我的猜测是,由于指定了两个关系并且两者都具有相同的实体类型,因此EF无法区分这两者。
有没有办法让这种情况发生?也许是一些DataAnnotation来命名结果表或什么?
答案 0 :(得分:1)
是的,问题就在于你说它有两个'Event'的集合。
您可以使用DataAnnotations设置双导航属性,但我个人喜欢使用模型构建器。这样可以保持您的poco类清洁并避免不必要的引用。
我写了一篇关于如何使用模型构建器和how EF navigation properties work的教程,我建议阅读它,因为它更深入。
从简单的角度来看,您需要以下内容:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().HasMany(e => e.SignedUpEvents)
.WithMany(e => e.SignedUpUsers);
modelBuilder.Entity<User>().HasMany(e => e.CompletedEvents)
.WithMany(e => e.CompletedUsers);
}