【发布时间】:2016-05-16 01:10:40
【问题描述】:
抱歉,这个问题的标题不是很好。我不知道如何将主题浓缩为一个句子。
这是我们开始的,非常简单的设置。 Orgs to Taxes 是一对多的。
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; }
}
这会按预期生成以下架构:
现在我想向 Orgs 添加一个 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 列已按预期添加到 Orgs,但是 Taxes 表现在有一个带有外键的 Org_Id 列,而原来的 OrgId 列不再是外键。
为什么会发生这些额外的操作和架构更改? 我认为因为 Org 有 Tax 并且 Tax 有 Org,所以 EF 认为我正在尝试将一对多与多对多混合,但我不知道如何解决它。
如何向 Orgs 添加 DefaultTaxId 外键?
【问题讨论】:
标签: c# entity-framework ef-code-first entity-framework-migrations