我使用代码优先和Fluent API在2个表之间建立了关系。这有效,并使用正确的字段和键分配生成模式。但是,我的问题是我需要能够在我的结果模型中说出SupplyPoint.SupplyPointPricing。我下面的内容只能让我反过来。
我认为必须有一种方法来保持我拥有的结构,但只有MAP SupplyPoint。
public partial class SupplyPoint
{
[Key]
public int SupplyPointId { get; set; }
public string SupplyPointName { get; set; }
}
public class SupplyPointPricing
{
public int SupplyPointPricingId { get; set; }
public int? SupplyPointId { get; set; }
[ForeignKey("SupplyPointId")]
public virtual SupplyPoint SupplyPoint { get; set; }
}
然后我使用Fluent API,这给了我表之间的1-1和我期望的Schema
modelBuilder.Entity<SupplyPointPricing>()
.HasOptional(a => a.SupplyPoint)
.WithMany()
.HasForeignKey(u => u.SupplyPointId);
上次我遇到这个问题时,我不得不改变设计并在SupplyPoint表中有一个外键。在之前的场合,这是好的,因为它总是匹配记录需要1-1。这次我需要保留这个结构,因为SupplyPoint和SupplyPointPricing之间有1-0。
答案 0 :(得分:0)
这就是我一直与我的模型建立一对一的关系,而不使用Fluent映射:
public partial class SupplyPoint
{
[Key]
public int SupplyPointId { get; set; }
public virtual SupplyPointPricing SupplyPointPricing { get; set; }
}
public class SupplyPointPricing
{
[Key, ForeignKey("SupplyPoint")]
public int SupplyPointId { get; set; }
public virtual SupplyPoint SupplyPoint { get; set; }
}
正如您所看到的,SupplyPointPricing
没有自己的Id,只有SupplyPoint的Id,它是1对1关系中的关键。
我唯一不确定的是SupplyPointId
是否可以为可以为空的。
这不会在SupplyPoint上创建外键,因此如果您没有定价,SupplyPoint.SupplyPointPricing
属性将为空。