2012-01-31 2 views
1

내 워크 플로는 EF 디자이너를 사용하여 점진적으로 모델을 개발하고 진행하면서 해당 모델에서 데이터베이스를 생성했습니다.EF에서 모델로부터 데이터베이스를 생성 할 때 계산 된 열을 유지하는 또 다른 방법이 있습니까?

최근에 계산 된 열을 만들어서 문자열 속성을 만들고 StoreGeneratedPattern = Computed를 설정하고 생성 된 DDL을 수동으로 계산 된 열로 변경했습니다. 이것은 시험을 통과합니다.

그러나 모델에서 나중에 데이터베이스를 다시 생성하면 계산 된 열을 다시 수동으로 변경해야하며 실제로 그만한 가치는 없습니다.

Google을 조금 탐색 한 후에도 해결책을 찾을 수 없었지만 DDL 트리거를 사용하여 해결할 수있었습니다.

같은 것이 있으면 다른 DDL 트리거 방법이 있는지 궁금합니다.

업데이트 : 아래 DDL 트리거 솔루션을 사용하기로 결정했는데, 여전히 불필요한 경우에도 관심이 있지만 문제는 내 워크 플로 스타일로 소수에 지나지 않는다고 생각됩니다. 데이터베이스에서 모델을 생성하기 때문에이 문제가 발생합니다. ...

-- 
-- DDL Trigger for CREATE TABLE 
-- 
alter trigger ddltrigCreateTable 
on database 
for create_table 
as 
    -- 
    -- Table DirectTrackInfoes 
    -- 
    if EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(max)')='DirectTrackInfoes' 
    begin 
     -- 
     -- Computed Column BaseUrl 
     -- 
     alter table DirectTrackInfoes 
     drop column BaseUrl 
     alter table DirectTrackInfoes 
     add BaseUrl as ((N'https://'+[ClientDomain])+N'/apifleet/rest') 
     -- 
     -- Initial data 
     -- 
     insert into [DirectTrackInfoes] ([Version], [ClientDomain], [ClientId], [AccessId], [UserName], [Password]) 
     values (N'1_0', N'foo.com', 9999, 1, N'', N'') 
    end 
    -- 
    -- Table HttpMethods 
    -- 
    if EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(max)')='HttpMethods' 
    begin 
     -- 
     -- Initial data 
     -- 
     insert into HttpMethods (MethodName) 
     values (N'GET'), (N'POST'), (N'PUT'), (N'DELETE') 
    end 
    go 
+0

코드를 부분 클래스로 유지할 수 있습니까? 나는 이것이 당신이 색인을 붙일 수있을 정도로 상상할 수 있습니까? –

+0

@Paul, 부분 클래스 옵션에 대한 나의 이론적 근거는 클라이언트가 데이터 액세스 컨테이너를 사용함에 따라 계산 된 값이 달라지며 테이블 정의에 배치하는 것을 보장하는 것보다 열등한 것입니다. –

+0

죄송합니다. 이것에 대한 답변, 많은 것들에 대해 EF와 관련이있는 것은 일반적인 XML 업데이트 (명명 규칙 등)를 수행하는 약간의 시각적 인 스튜디오 플러그인을 작성하는 것 뿐이며 문제를 해결하기 위해 edmx에 대해 실행할 수 있습니다. 필요할 때까지 이상적은 아니지만 적어도 DB 트리거는 필요하지 않습니다. 관심이 있다면 초기 샘플의 [GitHub] (https://github.com/paultyng/EdmxUpdater)에 몇 가지 코드가 있습니다. –

답변

0

이 상황을 처리하기 위해 DDL 트리거를 사용하는 것은 좋은 생각이 아닙니다. 데이터베이스에 대한 기존 변경 사항을 삭제하지 않으려면 (현재 상태를 삭제하지 않고) 실제 증분 방식으로 데이터베이스를 빌드하십시오. 예를 들어 Database Generation Power Pack으로 가능합니다 (최소한 데이터베이스 기능이있는 VS 2010 Premium이 있어야 함). 증분 DB 개발을 허용하는 다른 지원 도구가 Huagati EDMX tools 또는 LLBGen Designer이지만 이러한 도구는 일반적으로 상업용입니다.

또 다른 복잡한 옵션은 EDMX에 데이터베이스 사용자 지정을 직접 추가하는 것입니다. 누구든지 응용 프로그램을 사용하면 모델에서 데이터베이스를 생성하고 추가 단계없이 사용할 수 있어야합니다. 이것을 달성하는 것은 조금 복잡하지만 가능합니다. this answer에서 데이터베이스의 데이터 유형 변경에 대해 확인하십시오. 데이터베이스 생성 워크 플로에 다른 사용자 지정을 추가 할 때 동일한 접근 방식을 사용할 수 있습니다.