【发布时间】:2019-08-27 00:33:36
【问题描述】:
我有以下数据模型:
public class Foo
{
public Foo(int barId)
{
BarId = barId;
}
private int BarId;
public Bar Bar { get; private set; }
}
public class FooTypeConfig : IEntityTypeConfiguration<Foo>
{
public void Configure(EntityTypeBuilder<Foo> builder)
{
builder.HasOne(x => x.Bar)
.WithMany()
.HasForeignKey("BarId");
}
}
public class Bar
{
public int Id { get; private set; }
}
这很好用,根据我的期望,我有一个包含Id 和BarId 的Foo 表。从数据库中读取Foo 时,我的私有字段BarId 和Bar 属性也正确实现。
问题是我想找到一种方法来命名我的私有字段,并为我的数据库列选择一个不同的名称。我想将我的属性命名为 _barId,但仍然选择 BarId 作为我数据库中的列名。
这可能吗?
我尝试重命名 Foo 类中的字段并在 EntityTypeConfiguration 中指定我的(现在非常规命名的)外键 _barId
builder.HasOne(x => x.Bar).WithMany().HasForeignKey("_barId");
但这导致 EF 仍然生成 BarId 列,而不将其用作 Bar 表的外键...
migrationBuilder.CreateTable(
name: "Foos",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
BarId = table.Column<int>(nullable: true),
_barId = table.Column<int>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Foos", x => x.Id);
table.ForeignKey(
name: "FK_Foos_Bars__barId",
column: x => x._barId,
principalTable: "Bars",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
【问题讨论】: