1

我在设置数据库所需的正确关系时遇到了一些问题。

用文字...我想拥有一个可以多个(零:多个)分支机构的公司

公司上,我希望能够指定将存在的HeadOffice将存在于Branch表中(零:一)

我希望看到的是具有以下字段的公司表:Id、Name、HeadOfficeId 以及我希望看到的分支:Id、TradingAs、Name、Firm_Id

相反,我看到:

公司表具有以下字段:Id、Name、HeadOfficeId

我希望看到的分支:Id、TradingAs、Name、Firm_Id、Firm_Id1

模型类如图所示

public class Firm
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Branch> FirmBranches { get; set; }

    public virtual LawFirmBranch HeadOffice { get; set; }
}

public class Branch
{
    public int Id { get; set; }
    public string TradingAs {get;set;}
    public string Name {get;set;}


    public Firm Firm { get; set; }

}

我知道这会导致循环引用类型问题,我很高兴将 Firm HeadOffice 最初设置为 Null,直到 FirmBranches 属性中有值。

有什么方法可以指定 HeadOffice 具有 null 或一种类型的关系

4

1 回答 1

1

如果您想在模型中明确执行此操作,可以通过数据注释执行此操作:

公共类公司 { public int Id { 获取;放; } 公共字符串名称 { 获取;放; }

public virtual ICollection<Branch> FirmBranches { get; set; }

[ForeignKey("HeadOffice")]
public int? FirmId {get;set;}

public virtual LawFirmBranch HeadOffice { get; set; }

}

如果你不想在你的代码中暴露这个,你需要通过 fluent 来做到这一点:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Firm>()
            .HasOptional(f => f.HeadOffice)
            .WithOptionalDependent();
    }

这将创建:

在此处输入图像描述

如果您想更改键的名称,您需要在流式映射的末尾添加一个映射:

        modelBuilder.Entity<Firm>()
            .HasOptional(f => f.HeadOffice)
            .WithOptionalDependent()
            .Map(m => m.MapKey("YourKeyName"));
于 2012-09-05T16:02:20.533 回答