为了账号安全,请及时绑定邮箱和手机立即绑定

未存储在ModelSnapshot中的拥有实体的EF Core 2自定义PK名称

未存储在ModelSnapshot中的拥有实体的EF Core 2自定义PK名称

C#
慕姐8265434 2021-04-08 18:18:26
我目前在ASP.NET Core应用程序中使用带有EF Core 2.0的Npgsql提供程序。我已经将所有表/列/关系名称都转换为蛇形,以适应Postgres约定并使其更容易在代码中编写本机语句。这种迁移可以很好地进行,但是拥有类型的主键不会记录在ModelSnapshot中,因此,每次生成新迁移时,它都会尝试将PK从PK_foo重命名为pk_foo,即使在数据库中已经是pk_foo本身。除非删除有问题的行,否则该迁移显然将失败。有什么办法可以覆盖吗?还是要解决的办法是使其不拥有实体?这是部分OnModelCreating代码:builder.Entity<Foo>()    .OwnsOne(t => t.Bar)    .ToTable("bar")    .OnDelete(DeleteBehavior.Cascade);foreach (var entity in builder.Model.GetEntityTypes()){    entity.Relational().TableName = entity.Relational().TableName.ToSnakeCase();    foreach (var property in entity.GetProperties())    {        property.Relational().ColumnName = property.Name.ToSnakeCase();    }    foreach (var key in entity.GetKeys())    {        key.Relational().Name = key.Relational().Name.ToSnakeCase();    }    foreach (var key in entity.GetForeignKeys())    {        key.Relational().Name = key.Relational().Name.ToSnakeCase();    }    foreach (var index in entity.GetIndexes())    {        index.Relational().Name = index.Relational().Name.ToSnakeCase();    }}这是创建的迁移:migrationBuilder.CreateTable(    name: "bar",    columns: table => new    {        foo_id = table.Column<int>(nullable: false),        data = table.Column<byte[]>(nullable: true)    },    constraints: table =>    {        table.PrimaryKey("pk_bar", x => x.foo_id);        table.ForeignKey(            name: "fk_bar_foo_foo_id",            column: x => x.foo_id,            principalTable: "foo",            principalColumn: "id",            onDelete: ReferentialAction.Cascade);});EF核心版本:2.0数据库提供程序:Npgsql操作系统:Windows 10 IDE:Visual Studio 2017 15.3.4
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 287 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信