第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

將一對一轉(zhuǎn)換為一對多關(guān)系問題

將一對一轉(zhuǎn)換為一對多關(guān)系問題

C#
慕神8447489 2023-07-22 15:53:39
我在將一對一關(guān)系更改為一對多關(guān)系時遇到了一些極端困難,而無需完全清除數(shù)據(jù)庫并重新開始(我無法合理地對生產(chǎn)數(shù)據(jù)庫執(zhí)行此操作)。啟用自動遷移的實體框架 6(也無法更改此設(shè)置)。原始數(shù)據(jù)庫模式要求這些類之間存在一對一的關(guān)系(不相關(guān)的屬性已被刪除):public class Job? ? {? ? ? ? [Key]? ? ? ? public int JobIb { get; set; }? ? ? ? public virtual JobSite Location { get; set; }? ? }public class JobSite? ? {? ? ? ? [Key]? ? ? ? [ForeignKey("Job")]? ? ? ? public int JobSiteID { get; set; }? ? ? ? [Required]? ? ? ? public virtual Job Job { get; set; }? ? }隨后,需求更改為一對多(一個 JobSite 可以有多個 Job)public class Job? ? {? ? ? ? [Key]? ? ? ? public int JobIb { get; set; }? ? ? ? public virtual JobSite Location { get; set; }? ? }public class JobSite? ? {? ? ? ? [Key]? ? ? ? public int JobSiteID { get; set; }? ? ? ? public virtual ICollection<Job> Jobs { get; set; }? ? }這與EntityFrameworkTutorial上的約定 #3和Microsoft 的導(dǎo)航屬性示例相匹配。第一種方法進一步向下移動以進行歸檔。長話短說,您不能將現(xiàn)有列設(shè)為標識列我的下一個方法是在一次遷移中完全刪除 JobSites 表以及與 Job 表的關(guān)系,然后在第二次遷移中重新建立它們:這里的重點是為什么后續(xù)更新不會觸發(fā)EF認為模型與數(shù)據(jù)庫一致......步驟1public override void Up()? ? ? ? {? ? ? ? ? ? DropForeignKey("dbo.JobSites", "JobSiteID", "dbo.Jobs");? ? ? ? ? ? DropIndex("dbo.JobSites", new[] { "JobSiteID" });? ? ? ? ? ? DropTable("dbo.JobSites");? ? ? ? }? ? ? ? public override void Down()? ? ? ? {? ? ? ? ? ? CreateTable(? ? ? ? ? ? ? ? "dbo.JobSites",? ? ? ? ? ? ? ? c => new? ? ? ? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? ? ? ? JobSiteID = c.Int(nullable: false),? ? ? ? ? ? ? ? ? ? })? ? ? ? ? ? ? ? .PrimaryKey(t => t.JobSiteID);? ? ? ? ? ? CreateIndex("dbo.JobSites", "JobSiteID");? ? ? ? ? ? AddForeignKey("dbo.JobSites", "JobSiteID", "dbo.Jobs", "JobIb");? ? ? ? }最初這是有效的。但是,如果我刪除本地數(shù)據(jù)庫,并提取生產(chǎn)數(shù)據(jù)庫的新副本,并運行步驟 1 和步驟 2 遷移的更新數(shù)據(jù)庫,則會收到 System.InvalidOperationException 錯誤:&ldquo;自創(chuàng)建數(shù)據(jù)庫以來,支持&ldquo;ApplicationDbContext&rdquo;上下文的模型已更改。所以這非常令人沮喪。如果我添加遷移臨時,以查看它認為模型中發(fā)生了什么變化,我會得到與最初所做的完全相同的腳手架,就像它沒有注冊第 1 步和第 2 步遷移一樣。
查看完整描述

1 回答

?
繁星淼淼

TA貢獻1775條經(jīng)驗 獲得超11個贊

我終于找到了解決辦法。請記住,該項目正在使用自動遷移?;旧?,Step1 和 Step2 遷移方法已步入正軌,但是,在 Step1 和 Step2 之后應(yīng)用了第三種自動遷移。我刪除了 Step2 遷移,實質(zhì)上將其變成了自動遷移。當 update-database 運行時,它只應(yīng)用 Step1,然后檢查模型,自動創(chuàng)建 Step2 的內(nèi)容并運行它們,欺騙其他開發(fā)人員的機器使模型和數(shù)據(jù)庫重新保持一致。


public partial class ResetJobSites : DbMigration

    {

        public override void Up()

        {

            DropForeignKey("dbo.JobSites", "JobSiteID", "dbo.Jobs");

            DropIndex("dbo.JobSites", new[] { "JobSiteID" });

            DropTable("dbo.JobSites");

        }


        public override void Down()

        {

            CreateTable(

                "dbo.JobSites",

                c => new

                    {

                        JobSiteID = c.Int(nullable: false),

                    })

                .PrimaryKey(t => t.JobSiteID);


            CreateIndex("dbo.JobSites", "JobSiteID");

            AddForeignKey("dbo.JobSites", "JobSiteID", "dbo.Jobs", "JobIb");

        }

    }

PM> update-database

Specify the '-Verbose' flag to view the SQL statements being applied to the target database.

Applying explicit migrations: [201907291444500_ResetJobSites].

Applying explicit migration: 201907291444500_ResetJobSites.

Applying automatic migration: 201907291528423_AutomaticMigration.

PM> 

總結(jié)一下:要在打開自動遷移時將一對一轉(zhuǎn)換為一對多關(guān)系,您需要保留生產(chǎn)數(shù)據(jù)庫(但愿意接受正在轉(zhuǎn)換的表上的數(shù)據(jù)丟失)。

  • 創(chuàng)建顯式遷移以解耦兩個表(我通過注釋掉類、Job 表上的 nav 屬性、DbContext 中的 DbSet 以及構(gòu)建項目所需的任何其他內(nèi)容來實現(xiàn)此目的)。

  • 進行更改模型,將 nav 屬性添加回 Job 表(ICollection nav 屬性),將 DbSet 添加回 DbContext,然后讓自動遷移運行。

  • 首先不要讓自己陷入這種境地。


查看完整回答
反對 回復(fù) 2023-07-22
  • 1 回答
  • 0 關(guān)注
  • 173 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號