簡體   English   中英

從EF中的模型生成數據庫時,還有另一種方式來維護計算列嗎?

[英]Is there another way to maintain computed columns when generating database from model in 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

使用DDL觸發器來處理這種情況確實不是一個好主意。 如果要避免刪除對數據庫的現有更改,請以實際增量方式構建數據庫(不刪除當前狀態)。 例如,在數據庫生成Power Pack中,這是可能的(您必須至少具有具有數據庫功能的VS 2010 Premium)。 還有其他支持增量數據庫開發的支持工具,例如Huagati EDMX工具LLBGen Designer,但這些工具通常是商業化的。

另一個更復雜的選擇是直接將數據庫自定義添加到EDMX。 如果有人使用您的應用程序,那么他應該能夠從模型生成數據庫並使用它,而無需任何進一步的步驟。 實現這一點有點復雜,但是有可能。 檢查有關更改數據庫中數據類型的此答案 -可以使用相同的方法將任何其他自定義添加到數據庫生成工作流中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM