我想在两个现有(旧版)表之间创建一个可选的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]
等,但无济于事。
答案 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
}