我有一个项目要从 .NET 4.5 迁移到 .NET Core,出于某种原因(我不记得了),我想在运行时防止表名复数化update-database(.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 中的表(如上所示)已经复数化,因此我无法更改将被跟踪的 DbContext 以获取新的add-migration......我是否只是手动创建一个迁移文件并更新表名,如:
migrationBuilder.RenameTable(name: "Artist", schema: "dbo", newName: "Artists", newSchema: "dbo");
我认为为代码中实际未更改/跟踪的内容创建迁移不是好的做法?
呼啦一阵风
慕尼黑5688855
catspeake
相关分类