实体框架6.1使用Fluent API的0到多个单向导航属性

时间:2014-05-22 22:36:54

标签: entity-framework foreign-key-relationship ef-migrations fluent navigation-properties

我是EF的新手,并且在尝试使用Fluent API创建单向导航关联(0到多个)时遇到问题。以下是类的简化版本:

public partial class Company
{
 public int Id { get; set; }

 // "Company" is NOT REQUIRED to have any BillingInfo records/objects
 public virtual IList<BillingInfo> BillingInfos { get; set; }
}

public partial class BillingInfo
{
 public int Id { get; set; }

 // A "BillingInfo" requires ONE "Company"
 public int Company_Id { get; set; } 
}

我在使用EF 6.1 Code First时启用了迁移以及SQL Server 2012.

在我的派生的EntityTypeConfiguration类中,&#34;公司&#34;和&#34; BillingInfo&#34;,我已经尝试过每一种我能想到的方式:

  1. 公司不要求任何BillingInfo记录,但可能有很多。
  2. BillingInfo只需要一家公司。
  3. 维护公司和BillingInfo之间的单向导航。 (不想在BillingInfo上拥有公司导航属性)
  4. EF Migration在数据库中创建NON-NULLABLE Company_Id字段,具有已定义的ForeignKey约束。
  5. 我尝试的所有方法,只能让我部分到处。我最接近的就是这个(但唯一缺少的是没有创建外键约束):

    class CompanyConfig : EntityTypeConfiguration<Company>
    {
        public CompanyConfig()
        {
            this.HasOptional(company => company.BillingInfos)
                .WithMany()
                .Map(m => m.MapKey("Company_Id"));
        }
    }
    

    任何想法???

1 个答案:

答案 0 :(得分:-2)

我认为您应该使用以下代码:

private class CompanyMapping : EntityTypeConfiguration<Company>
    {
        public CompanyMapping()
        {
            this.HasMany(o => o.BillingInfos).WithOptional().HasForeignKey(fk => fk.Company_Id);
        }
    }
    private class BillingInfoMapping : EntityTypeConfiguration<BillingInfo>
    {
        public BillingInfoMapping()
        {
            this.HasOptional(o => o.Company).WithMany(c=>c.BillingInfos).HasForeignKey(fk => fk.Company_Id);
        }
    }