【发布时间】:2019-02-10 21:07:01
【问题描述】:
我认为 Entity Framework Core 拥有的类型默认添加到与其所有者相同的表中。但我在迁移中没有看到这一点。
有人能告诉我吗?
有没有办法通过将 Name 属性直接添加到 Person 表来获得所需的迁移?
public class Person
{
public Name Name { get; set; }
}
public class Name
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class PersonConfiguration : IEntityTypeConfiguration<Person>
{
public void Configure(EntityTypeBuilder<Person> person)
{
person.OwnsOne(p => p.Name);
}
}
dotnet ef migrations add DidNotSeeThatComing
结果
public partial class DidNotSeeThatComing : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Name",
columns: table => new
{
FirstName = table.Column<string>(type: "varchar", nullable: true),
LastName = table.Column<string>(type: "varchar", nullable: true),
PersonId = table.Column<Guid>(nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Name", x => x.PersonId);
table.ForeignKey(
name: "FK_Name_Person_PersonId",
column: x => x.PersonId,
principalTable: "Person",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
);
}
}
【问题讨论】:
-
您的想法是正确的 - 默认情况下它与所有者位于同一个表中,我无法重现该问题。你有干净的复制项目吗?
-
@IvanStoev 已验证使用干净的 repo 项目按预期工作
-
发生这种情况的项目中是否有任何异常代码?喜欢模型实体/反射上的循环并调用
ToTable? -
Ugg 我用 foreach 对自己做了这个(modelBuilder.Model.GetEntityTypes() 中的var entity){ entity.Relational().TableName = entity.Name; }
-
嘿嘿,所以最后是不寻常的模型实体循环 :) 很高兴您解决了这个问题。
标签: entity-framework-core entity-framework-migrations ef-core-2.1 owned-types