我有一个项目要从 .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 seedbo.Albumdbo.Artist//what i wantdbo.Albumsdbo.Artists我相信缺少复数是导致我尝试加载页面时出现此错误的原因:SqlException: Invalid object name 'Albums'.//further down the stack trace i seeUnLink.Services.AlbumService.GetAlbumByStringExt(string stringExt) in AlbumService.csalbum = _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");我认为为代码中实际未更改/跟踪的内容创建迁移不是好的做法?
3 回答
呼啦一阵风
TA贡献1802条经验 获得超6个赞
我认为这会有所帮助:
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; }
}
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
好吧,您已经对代码进行了更改,因为您曾经有那行 about Remove<Pluralizing>
,但现在没有了。不幸的是,Add-Migration
可能不会接受此更改,尤其是当您同时转换为 .Net Core 时。
由于您的模型与您的表不匹配,您有以下选择:
手动创建更改表名的迁移:
migrationBuilder.RenameTable("Album", newName: "Albums");
或 2. 直接向 SQL 中的 Db 写入查询以更改表名:
EXEC sp_rename 'dbo.Album', 'dbo.Albums';
- 3 回答
- 0 关注
- 117 浏览
添加回答
举报
0/150
提交
取消