[英]How to embed EDMX in a Code First assembly?
我們在EF6.1中使用Code First - 我們的模型現在超過300多個表,啟動時間很荒謬。 我們已經嘗試過預生成視圖,但它沒有多大幫助,它是Code First管道中的模型編譯,占用了大部分時間。
我們將嘗試使用Database / Model First方法通過使用具有到CSDL,SSDL和MDL文件的元數據鏈接的實體連接字符串而不是直接SQL連接來初始化上下文。 這將是我們理想的過程:
初始測試顯示啟動時間縮短了約80% - 這里的棘手部分是在第1步中進行構建后資源嵌入!
任何人都可以提供任何關於如何在MSBuild中完成第1步的線索嗎? 是否有另一種策略可行? 基本上我們需要零維護解決方案,以便開發人員不必手動執行除構建代碼之外的任何操作,也不需要特殊的部署注意事項。
編輯:
我們最終使用了一個新的獨立類庫項目,該項目引用了包含Code First模型的項目。 該項目包含一個T4模板,它將EDMX從DbContext寫入內存,然后將組件部分保存到已標記為嵌入資源的項目文件中,因此我們也獲得了源代碼控制。
構建順序保證資源始終是最新的,實體連接字符串在運行時引用此資源程序集。 通過使用T4 MSBuild集成目標完成MSBuild集成,以便模板始終在項目構建期間運行。
您當然可以使用MSBuild執行此操作。 你將不得不拿起一些構建腳本,但不應該太糟糕。
你現在怎么樣? 您是否有運行的控制台應用程序來生成edmx? 聽起來你已經完成了很難 - 與MSBuild集成應該很容易。 我會假設你這樣做,並從那里開始。
順便說一句:要知道的一件事是.csproj文件是 MSBuild腳本,因此任何自定義MSBuild腳本都可以進入那些csproj文件。
為了增加復雜性,您可以:
關於最后一個選項(自定義構建任務)的一個好處是,您可以將錯誤消息寫回構建過程。 如果任務失敗,這應該有助於獲取有用的信息,如果您使用構建服務器,那么服務器應該以與任何其他構建消息相同的方式獲取這些消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.