0

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

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

除了使用 DB 工具之外,我没有做太多的 DB 建模,它们总是为我找到正确的关系,但是现在,我必须首先使用流利的映射为代码映射这些关系。我如何描述这两种关系,什么是主面和从属面,这里的多重性是什么?

4

1 回答 1

0

Code First 试图将可能是相同关系的两个方面联系起来。相反,当您有两个不同的单向关系时,您需要通过使用不带参数的 WithMany() 明确告诉 Code First 反向导航属性不存在来告诉 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);
    }
}
于 2012-04-22T15:03:32.417 回答