我是Entity Framework的新手,我正在尝试在Code-First项目中配置两个导航属性。
第一个属性是employee_pay_period(s)的集合。每个employee_salary都有多个employee_pay_period(s),每个employee_pay_period都有一个employee_salary。
employee_pay_period.employee_salary_id是外键。
第二个属性employee_salary.employee_current_pay_period有点棘手。它是指向当前employee_pay_period的属性。所以导航属性从一个employee_salary到一个employee_pay_period。与第二个属性关联的DB中没有外键,每个employee_salary必须包含employee_current_pay_period。
如何使用fluent API正确映射这些属性。
public class employee_salary
{
public employee_salary()
{
employee_pay_period = new HashSet<employee_pay_period>();
}
[Key]
public int employee_salary_id { get; set; }
public int? employee_current_pay_period_id { get; set; }
public virtual employee_pay_period employee_current_pay_period { get; set; }
public virtual ICollection<employee_pay_period> employee_pay_period { get; set; }
}
public partial class employee_pay_period
{
[Key]
public int employee_pay_period_id { get; set; }
public int employee_salary_id { get; set; }
public virtual employee_salary employee_salary { get; set; }
}
答案 0 :(得分:0)
如果我理解正确,您希望employee_salary
和employee_pay_period
分别建立1-many关系,而employee_salary
与当前employee_pay_period
之间的关系为1-1 / p>
这样的事情(假设你已经设置了其余的fluentApi上下文配置类)OnModelCreating(ModelBuilder builder)
函数:
builder.Entity<employee_salary>(e =>
{
e.HasMany(s => s.employee_pay_period) // salary has many pay periods
.WithOne(p => p.employee_salary) // pay period has one salary
.HasForeignKey(p => p.employee_salary_id) // foreign key on pay period linking to a single salary id
.OnDelete(DeleteBehavior.Restrict); // Or whatever the desired delete behaviour should be
e.HasOne(s => s.employee_current_pay_period) // salary has one current pay period
.WithOne(p => p.employee_salary) // pay period has one salary
.HasForeignKey<employee_salary>(s => s.employee_current_pay_period_id) // foreign key on salary linking to a single current pay period id
.OnDelete(DeleteBehavior.Restrict); // Or whatever the desired delete behaviour should be
}