2014-02-12 2 views
12

데이터베이스 모델을 제어하는 ​​코드에 Entity Framework 마이그레이션을 사용합니다. 그것은 매력적이며 나는 지금까지 모든 것을 다룰 수 있습니다. 하지만 이제는 데이터베이스 트리거를 하나 추가해야하며 EF 마이그레이션을 통해이 작업을 수행하고이 경우에만 별도의 SQL 스크립트를 사용하지 않을 것입니다. (이는 고객에게 혼란을 줄 수 있습니다. 특히 우리가 모든 것을 처리 할 수 ​​있다고 확신하면 더욱 그렇습니다. EF 마이그레이션). 내 트리거는 정직과 TIS과 같습니다Entity Framework에서 데이터베이스 트리거 추가 코드 처음 마이그레이션

CREATE OR REPLACE TRIGGER [name] BEFORE UPDATE ON myTable ... 

EF 마이그레이션에 트리거를 추가하는 명령이 있는가?

+0

[EntityFramework.Triggers] (http://github.com/NickStrupat/EntityFramework.Triggers)의 해결책을 확인하십시오. NuGet에도 있습니다. –

+0

유망 해 보인다. 여러 데이터베이스 시스템 (오라클, SQL 서버 등)을 지원하는 경우 알 수 있습니까? – StefanG

+0

SQL Server에서만 테스트했지만, 공급자에 상관없이 Entity Framework를 기반으로 구축되었습니다. 'DbContext'에 의존합니다. –

답변

23

Up 메서드에 Sql("SQL COMMAND HERE") 메서드 호출을 추가하기 만하면됩니다. Down 메소드에 drop 문을 추가하는 것을 잊지 마십시오. 필요한 경우 모델을 변경하지 않고 Add-Migration을 실행하여 빈 마이그레이션을 만들 수 있습니다.

public partial class Example : DbMigration 
{ 
    public override void Up() 
    { 
     Sql("CREATE OR REPLACE TRIGGER [name] BEFORE UPDATE ON myTable ..."); 
    } 

    public override void Down() 
    { 
     Sql("DROP TRIGGER [name]"); 
    } 
} 
+1

IF NOT EXISTS (sys.triggers에서 name = 'name'을 (를) 선택하십시오)를 UP()으로 추가하여 멱등수로 만들 수도 있습니다. – eoghank

+13

@ eoghank. 내가 동의하는지 모르겠다. 마이그레이션의 개념은 모든 방향에서 반복적이어야하며 따라서 상황이 발생하는 것을 방지한다는 것입니다. 이론 상으로는 존재 확인이 필요하다면 마이그레이션을 올바르게 사용하지 않고 있습니다. 테이블 존재 여부를 확인하지 않기 때문에 트리거를해서는 안됩니다. –

+1

EF 코어의 경우 migrationBuilder.Sql ("blah blah ..."); – wye