Мой рабочий процесс заключался в том, чтобы постепенно разрабатывать модели с использованием конструктора EF и генерировать базу данных из этой модели по мере моего продвижения.Есть ли другой способ поддерживать вычисляемые столбцы при создании базы данных из модели в EF?
Недавно я захотел вычисленный столбец, поэтому я создал свойство string, установил StoreGeneratedPattern = Computed и вручную изменил сгенерированный DDL как вычисленный столбец. Это проходит испытание.
Однако, если я позже регенерирую базу данных из модели, мне придется вручную изменить вычисленный столбец, и это не стоит усилий.
После просмотра Google немного, я не смог найти решение, но ему удалось создать триггер DDL.
Мне любопытно, есть ли другой способ, не связанный с DDL-спусковым механизмом, чтобы выполнить одно и то же.
Update: Я решил пойти с триггером DDL раствором ниже, хотя я до сих пор интересно, если это не нужно, но я подозреваю, что моя проблема исходит от того, в меньшинстве с моим стилем рабочего процесса и большинство других дона» t имеют эту проблему, потому что они генерируют модель из базы данных ...
--
-- 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) раннего образца. –