使用 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 更有效。
我想使用 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 更有效。