几个多对多的关系

时间:2012-08-27 09:36:02

标签: entity-framework-4.1 code-first

我设置了这两个类,并且我希望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来命名结果表或什么?

1 个答案:

答案 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);
        }