0

我有我的項目是一個Xamarin.Forms應用程序,與Azure SQL數據庫和Azure移動應用服務。codefirst,重命名錶,觸發錯誤

我使用代碼優先來創建數據庫。

現在我想將「客戶」類重命名爲「公司」。 遷移正確完成,現有表被重命名。

但是,有一個自動創建的觸發器也被重命名,但是正在使用的表名不會被修改。所以觸發器不再工作了。

我想觸發器的存在是因爲添加到模型構建器中的「ServiceTableColumn」約定。

這是所生成的遷移代碼:

public partial class rename_customer_to_company_step_1 : DbMigration 
{ 
    public override void Up() 
    { 
     RenameTable(name: "dbo.Customers", newName: "Companies"); 
    } 

    public override void Down() 
    { 
     RenameTable(name: "dbo.Companies", newName: "Customers"); 
    } 
} 

這是該觸發器的腳本(執行上述遷移後):

CREATE TRIGGER [dbo].[TR_dbo_Customers_InsertUpdateDelete] 
ON [dbo].[Companies] 
AFTER INSERT, UPDATE, DELETE AS 

BEGIN 

UPDATE [dbo].[Customers] 
SET [dbo].[Customers].[UpdatedAt] = CONVERT(DATETIMEOFFSET, SYSUTCDATETIME()) FROM INSERTED 
WHERE inserted.[Id] = [dbo].[Customers].[Id] 
END 

正如你可以看到,該表本身已經(ON [dbo]。[Companies] ),但觸發器的內容仍然引用上一個表名(UPDATE [dbo]。[Customers])。 當然,觸發器不起作用。

如何正確修改觸發器?觸發器是否真的有必要?我可以擺脫這些觸發器嗎?

任何想法如何糾正?我更喜歡不手動更新觸發器,爲什麼我需要使用代碼優先遷移?

由於提前,

里斯

回答

0

如果代碼優先遷移沒有做到這一點,你將不得不修改代碼優先遷移文件或更新觸發自己。如果這是一次性事件,則觸發器相對容易地完成。有關詳細信息,請參閱Zumo Book的第3章http://aka.ms/zumobook