如果是1-1的关系,Fluent API映射其他方面

时间:2013-12-12 07:36:17

标签: asp.net-mvc

我使用代码优先和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。

1 个答案:

答案 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属性将为空。