c# - 从 .NET 4.5 迁移到 .NET Core 2.2 后如何处理 "re-pluralize"数据库表?

标签 c# entity-framework-core entity-framework-migrations

我有一个项目要从 .NET 4.5 迁移到 .NET Core,出于某种原因(我不记得了),我想在运行 update 时防止表名复数化-数据库 像这样(.NET 4.5):

public class UncoveredLink : DbContext
{
    //removed constructor for brevity

    public DbSet<Album> Albums { get; set; }
    public DbSet<Artist> Artists { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //the line I'm talking about is here
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }

}

因此,当我在 SQL Management Studio 中查看我的数据库时,我看到以下内容:

//what I see
dbo.Album
dbo.Artist

//what i want
dbo.Albums
dbo.Artists

我相信缺少复数是导致我尝试加载页面时出现此错误的原因:

SqlException: Invalid object name 'Albums'.

//further down the stack trace i see
UnLink.Services.AlbumService.GetAlbumByStringExt(string stringExt) in AlbumService.cs
album = _db.Albums.Where(x => x.StringExt == stringExt).FirstOrDefault();

看到了吗?我正在尝试调用 _db.Albums 但我相信我不能这样做,因为该表没有复数并且我的核心上下文没有复数 OnModelCreating 之类的我的 .NET 4.5 做到了(似乎无法添加它)。

我在 .NET Core 2.2 中的新 DbContext 如下所示:

public class ApplicationDbContext : IdentityDbContext
{

    public DbSet<Album> Albums { get; set; }
    public DbSet<Artist> Artists { get; set; }

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

}

如何更新表名?我的核心 DbContext 中的表(如上所示)已经复数化,所以我无法更改为新的 add-migration 跟踪的 DbContext ...我只是手动创建迁移文件并更新表名,如:

migrationBuilder.RenameTable(name: "Artist", schema: "dbo", newName: "Artists", newSchema: "dbo");

我认为为代码中实际未更改/跟踪的内容创建迁移不是好的做法?

最佳答案

我认为它会有所帮助:

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
    {
          modelBuilder.Entity<Album>()
                        .ToTable("Album");
    }

另一种方式是:

[Table("Album")]
 public class Album
    {
        public int AlbumId { get; set; }
        public string Name { get; set; }
    }

关于c# - 从 .NET 4.5 迁移到 .NET Core 2.2 后如何处理 "re-pluralize"数据库表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55883320/

相关文章:

c# - 如何在安装项目 C# 中添加搜索进程的启动条件?

c# - 将数据从 C++ 传递到 C# 的最有效方法

c# - 获取 NpgSql Entity Framework 查询文本

c# - 在 Entity Framework 上运行嵌套查询时出现"Value cannot be null. Parameter name: source"

c# - EF7 DB-First : Scaffold-DBContext produces model without constructor or setter on ICollection

c# - Entity Framework Core 在转换时是延迟加载

c# - Entity Framework 无法使用二进制数组添加迁移

entity-framework - 为什么会抛出 AutomaticMigrationsDisabledException?

c# - 取决于另一个项目的 MSBuild 自定义任务

c# - 在单独的程序集中启用带有上下文的迁移?