亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從 .NET 4.5 遷移到 .NET Core 2.2 后如何“重新復數化”數據庫表?

從 .NET 4.5 遷移到 .NET Core 2.2 后如何“重新復數化”數據庫表?

C#
明月笑刀無情 2022-12-31 13:54:47
我有一個項目要從 .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; }

    }


查看完整回答
反對 回復 2022-12-31
?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

好吧,您已經對代碼進行了更改,因為您曾經有那行 about Remove<Pluralizing>,但現在沒有了。不幸的是,Add-Migration可能不會接受此更改,尤其是當您同時轉換為 .Net Core 時。

由于您的模型與您的表不匹配,您有以下選擇:

  1. 手動創建更改表名的遷移:

migrationBuilder.RenameTable("Album", newName: "Albums");

或 2. 直接向 SQL 中的 Db 寫入查詢以更改表名:

EXEC sp_rename 'dbo.Album', 'dbo.Albums';


查看完整回答
反對 回復 2022-12-31
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

EF Core 2.0 引入了一個新的 IPluralizer 服務,用于單數化實體類型名稱和復數化 DbSet 名稱。

也許你可以調查一下。這里有很多關于這個的帖子或者這里有一篇關于那個的博客文章


查看完整回答
反對 回復 2022-12-31
  • 3 回答
  • 0 關注
  • 151 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號