如何映射同一两个实体之间的两个关系?

时间:2012-04-22 12:09:44

标签: entity-framework code-first modeling entity-model

关于如何正确描述这些关系的一些建议将是一个很好的开始。准确描述的东西是寻找解决方案的问题。我有实体User和Login,其中Login基本上描述了一个用户的登录会话。因此,用户通常有许多登录实例。此关系仅在登录侧描述,具有必需的单用户导航属性,并且在用户端存在隐含但未声明的登录集合。

然后,对于另一个关系,在Login的授权下创建User,因此在User侧描述了这种关系,具有Login导航属性,并且在Login侧有一个隐含但不是User集合

除了使用数据库工具之外,我没有做太多的数据库建模,他们总是只是为我找到合适的关系,但是现在,我必须首先使用流畅的映射来映射这些关系。我如何描述这两种关系,原则和依赖方面是什么,以及这里的多重性是什么?

1 个答案:

答案 0 :(得分:0)

Code First试图将可能相同关系的两个方面联系起来。当你有两个不同的单向关系时,你需要通过明确告诉Code First使用不带参数的WithMany()来存在反向导航属性来告诉Code First:

public class User
{
    public int Id { get; set; }
    public int LoginId { get; set; }
    public virtual Login Login { get; set; }
}

public class Login
{
    public int Id { get; set; }
    public int UserId { get; set; }
    public virtual User User { get; set; }
}

public class SomeContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Login> Logins{ get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>()
            .HasRequired(e => e.Login)
            .WithMany()
            .HasForeignKey(e => e.LoginId);

        modelBuilder.Entity<Login>()
            .HasRequired(e => e.User)
            .WithMany()
            .HasForeignKey(e => e.UserId);
    }
}