我正在使用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
表对Sessions
和ActiveSession
属性的InSessions
表都有一个外键。任何想法为什么会发生这种情况?
答案 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");
});