0

我设置了这两个类,我希望 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 来命名结果表之类的?

4

1 回答 1

1

是的,正如您所说,问题在于它有两个“事件”集合。

您可以使用 DataAnnotations 设置双重导航属性,但我个人的偏好是使用模型构建器。这使您的 poco 类保持清洁并避免不必要的引用。

我写了一篇关于如何使用模型构建器以及EF 导航属性如何工作的教程,我建议您阅读它,因为它更深入。

从简单的角度来看,您需要以下内容:

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);
        }
于 2012-08-27T10:07:47.083 回答