使用 EF 6.0 和代码优先的一对一 EntityTypeConfiguration

One to One EntityTypeConfiguration using EF 6.0 and code first

我想使用 EF 6、代码优先和流畅配置创建一对一关系。我只想在根目录中使用 属性 导航。这可能吗?如果是这样,我该如何配置我的 EntityTypeConfigurations?我需要将 SalarayId 更改为 EmployeeId 吗?

public class Employee
{
    public int EmployeeId { get; set; }
    public string Name { get; set; }

    public virtual Salary Salary {get; set; }
}

public class Salary
{
    public int SalaryId { get; set; }
    public double Amount { get; set; }
}

public class EmployeeConfiguration : EntityTypeConfiguration<Employee>
{
    public EmployeeConfiguration()
    {
        HasKey(e => e.EmployeeId);
    }
}

public class SalaryConfiguration : EntityTypeConfiguration<Salary>
{
    public SalaryConfiguration()
    {
        HasKey(s => s.SalaryId);
    }
}

是的。 EF6 中的一对一关系基于两个 table 之间的 PK。 PK的名称不需要匹配,但一般来说最好避免在查看数据时混淆。

对于 EntityTypeConfiguration,只需从引用另一个对象的一侧进行设置,在本例中为 Employee:

public EmployeeConfiguration()
{
    HasKey(e => e.EmployeeId);
    HasRequired(e => e.Salary) // or HasOptional if salary is optional on Employee
        .WithRequired(); // no back reference.
}

EF 应该在每个 table 上通过 PK 将它们结合起来。

希望薪水不仅仅是一个关键和金额。就目前而言,这是不必要的规范化。一对一关系可以很好地容纳昂贵的 and/or 不常用的数据列。 (即图像或大文本)从性能和存储的角度来看,将 Salary 作为 Double/Decimal Employee 更有效。