Dav*_*ous 5 entity-framework-core ef-core-2.1 owned-types entity-framework-migrations
我认为 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);
}
}
Run Code Online (Sandbox Code Playgroud)
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);
});
);
}
}
Run Code Online (Sandbox Code Playgroud)
我自己用这个配置代码无意中创建了这个
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
entity.Relational().TableName = entity.Name;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的解决方法
[Owned] // Microsoft.EntityFrameworkCore
public class Name { ... }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
if(!entity.ClrType.GetCustomAttributes().OfType<OwnedAttribute>().Any())
{
entity.Relational().TableName = entity.Name;
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2992 次 |
| 最近记录: |