내 워크 플로는 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
코드를 부분 클래스로 유지할 수 있습니까? 나는 이것이 당신이 색인을 붙일 수있을 정도로 상상할 수 있습니까? –
@Paul, 부분 클래스 옵션에 대한 나의 이론적 근거는 클라이언트가 데이터 액세스 컨테이너를 사용함에 따라 계산 된 값이 달라지며 테이블 정의에 배치하는 것을 보장하는 것보다 열등한 것입니다. –
죄송합니다. 이것에 대한 답변, 많은 것들에 대해 EF와 관련이있는 것은 일반적인 XML 업데이트 (명명 규칙 등)를 수행하는 약간의 시각적 인 스튜디오 플러그인을 작성하는 것 뿐이며 문제를 해결하기 위해 edmx에 대해 실행할 수 있습니다. 필요할 때까지 이상적은 아니지만 적어도 DB 트리거는 필요하지 않습니다. 관심이 있다면 초기 샘플의 [GitHub] (https://github.com/paultyng/EdmxUpdater)에 몇 가지 코드가 있습니다. –