對不起,這個問題的標題不是很好。我不確定如何將主題縮減爲單個句子。混合一對多與多對多的關係
這是我們開始的,非常簡單的設置。組織稅收是一對多的。
class DataContext : DbContext
{
public DbSet<Org> Orgs { get; set; }
public DbSet<Tax> Taxes { get; set; }
}
class Org
{
public int Id { get; set; }
private List<Tax> taxes;
public virtual List<Tax> Taxes
{
get { return taxes ?? (taxes = new List<Tax>()); }
protected set { taxes = value; }
}
}
class Tax
{
public int Id { get; set; }
public int OrgId { get; set; }
public virtual Org Org { get; set; }
}
這將產生以下的模式,符合市場預期:
現在我想一個DefaultTaxId添加[機構。
class Org
{
public int Id { get; set; }
private List<Tax> taxes;
public virtual List<Tax> Taxes
{
get { return taxes ?? (taxes = new List<Tax>()); }
protected set { taxes = value; }
}
// default tax added here
public int? DefaultTaxId { get; set; }
public virtual Tax DefaultTax { get; set; }
}
然而,當我產生遷移,C#是這樣的:
public override void Up()
{
DropForeignKey("dbo.Taxes", "OrgId", "dbo.Orgs");
AddColumn("dbo.Orgs", "DefaultTaxId", c => c.Int());
AddColumn("dbo.Taxes", "Org_Id", c => c.Int());
CreateIndex("dbo.Orgs", "DefaultTaxId");
CreateIndex("dbo.Taxes", "Org_Id");
AddForeignKey("dbo.Orgs", "DefaultTaxId", "dbo.Taxes", "Id");
AddForeignKey("dbo.Taxes", "Org_Id", "dbo.Orgs", "Id");
}
和架構是這樣的:
的DefaultTaxId
列被添加到[機構不出所料,但Taxes表現在有一個帶有外鍵的Org_Id
列,並且原始OrgId
列是n o更長的外鍵。
爲什麼會發生這些額外的操作和模式更改? 我認爲,因爲組織有一個稅和一個稅有一個組織,EF認爲我試圖混合一對多與多對多,但我不知道如何解決它。
我該如何爲Orgs添加一個DefaultTaxId外鍵?