0

저는 Azure SQL 데이터베이스와 Azure Mobile App Service가있는 Xamarin.Forms 앱입니다.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)을 참조하십시오.