与同一对象无法正确构建的一对一加多对多关系

时间:2011-07-25 22:52:56

标签: asp.net-mvc-3 entity-framework ef-code-first many-to-many

我正在使用Entity Framework 4代码第一种方法在ASP MVC 3中设计我的数据库,我遇到了一些麻烦。我有一个POCO课程如下:

public class User
{
    [Key]
    public Guid UserID { get; set; }
    public string UserName { get; set; }
    public DateTime CreationDate { get; set; }
    public string Email { get; set; }
    public int Points { get; set; }
    public Session ActiveSession { get; set; }
    public ICollection<Session> InSessions { get; set; }
}

Session作为我在其他地方定义的另一个模型类,其中ICollection<User>作为其属性之一。如果我从public Session ActiveSession { get; set; }类中删除User属性,那么正确构造了多对多映射和UserSessions中间表,但是当我添加ActiveSession时一对一映射,它打破了多对多映射,并且没有构建中间表。相反,Users表对SessionsActiveSession属性的InSessions表都有一个外键。任何想法为什么会发生这种情况?

1 个答案:

答案 0 :(得分:3)

在您的情况下,EF认为ICollection<User>类中的Session是由Many创建的一对多关系的ActiveSession结尾。

所以你需要配置mannualy

modelBuilder.Entity<User>().HasOptional(u => u.ActiveSession)
   .WithMany()
   .Map(u => u.MapKey("ForeignKeyColumn"));

modelBuilder.Entity<User>()
   .HasMany(u => u.InSessions)
   .WithMany(s => s.Users)
   .Map(m =>
       {
           m.ToTable("UserSessions");
           m.MapLeftKey("UserID");
           m.MapRightKey("SessionID");
       });