EF - 1:1关系不在主键上

时间:2016-02-07 18:50:25

标签: c# mysql entity-framework

我想在两个现有(旧版)表之间创建一个可选的1:1映射,其中每个getBound :: Exp -> Maybe String getBound = preview expBound -- Generated core for getBound -- -- getBound1 = -- \ eta_B1 -> -- case eta_B1 of _ { -- __DEFAULT -> (Nothing) `cast` ...; -- Lambda y1_a6XB y2_a6XC -> (Just y1_a6XB) `cast` ... -- } 记录可能包含或不包含 - 最多 - 一个MainTable记录:

SubTable

internal class MainTable { [Key] public int Id { get; set; } } internal class SubTable { [Key] public int Id { get; set; } public int MainTableId { get; set; } } 实际上并没有用于任何目的,但由于遗留代码仍然在运行,因此它最好仍然是PrimaryKey和AutoGenerated。

OnModelCreating更新为:

SubTable.Id

使用上述模型,我运行modelBuilder.Entity<MainTable>() .HasOptional(x => x.Sub) .WithRequired(x => x.Main); Add-Migration initial。然后我将模型更新为:

Update-Database

正在运行internal class MainTable { [Key] public int Id { get; set; } public SubTable Sub { get; set; } // new } internal class SubTable { [Key] public int Id { get; set; } public int MainTableId { get; set; } public MainTable Main { get; set; } // new } 会创建一个新的但运行它会出现以下错误:Add-Migration

生成的迁移:

Table 'dbo.SubTable' doesn't exist

我不确定为什么EF想要删除所有主键等,但最后一行似乎表明它想绑定Sub.Id-&gt; Main.Id,而它应该绑定Sub.MainTableId-&gt; Main.Id

之后我尝试使用DataAnnotationAttributes而不是public override void Up() { DropPrimaryKey("dbo.SubTable"); AlterColumn("dbo.SubTable", "Id", c => c.Int(nullable: false)); AddPrimaryKey("dbo.SubTable", "Id"); CreateIndex("dbo.SubTable", "Id"); AddForeignKey("dbo.SubTable", "Id", "dbo.MainTable", "Id"); } [ForeignKey]等,但无济于事。

1 个答案:

答案 0 :(得分:0)

我会做这样的事情

internal class MainTable
{
    [Key]
    public int Id { get; set; }

    public virtual SubTable Sub { get; set; } // new
}
internal class SubTable
{
    [Key]
    public int Id { get; set; }
    public int MainTableId { get; set; }

    [ForeignKey("MainTableId")]
    public virtual MainTable Main { get; set; } // new
}