簡體   English   中英

相同dll和EF的不同版本。

[英]Different versions of same dll and EF.

我們有幾個項目將業務系統集成到不同的外部服務中。 “我們”僅在編寫中間件,對任何一個系統都沒有控制權。 當新版本中發生重大更改時,我們將不得不以某種方式應對。

我們使用的環境是VS2013,C#和EF 5.0-6.NN

我們依賴的資源有:多個Entity Framework模型(目前為第一個模型,但可能會發生變化)。 需要引用的3個dll。

直到星期五,當我們對其中一個dll中的一個字段的數據類型進行重大更改時,資源一直向后兼容。 (從int到字符串)。

一種解決方法:可以加載針對數據庫不同版本的相同EF嗎? 我知道有人會被不同的dll:s等強制加載,但是然后,應該如何處理linq查詢等?

在熱點是否可行,請檢查類型並重新創建整個LINQ表達式?

if(typeof(Items.Prop) == typeof(int)){
  var things = from x in framework.Items where x.Prop = 2 select x;
} else if(typeof(Items) == typeof(string)){
  var things = from x in framework.Items where x.Prop = "2" select x;
}

但是,根據linq表達式求值,這可能會失敗,因為我們正在將其與錯誤的數據類型進行比較。

或者應該使用以下方法為資源的每個版本創建一個特定的可執行文件

#ifdef __VER10
  var things = from x in framework.Items where x.Prop = 2 select x;
#endif
#ifdef __VER9
  var things = from x in framework.Items where x.Prop = "2" select x;
#endif

但是,然后可以執行Visual Studio提供的這種自動化工具。 正確的可執行文件的部署本身就成為問題。

這個問題對於堆棧溢出來說可能太松散了,我認為這是一個常見問題,但是我不確定如何在Google上找到答案。

您應該始終為API /資源的不同版本提供特定的可執行文件。
您不能使用Visual Studio真正實現它的自動化,但是可以使用配置管理器創建不同的構建配置。
有關如何調整引用的信息,請參見此處: Visual Studio:用於配置的不同DLL
然后,您可以通過轉到Project-> Properties-> Build-> Conditional配置符號來指定__VER9__VER10類的構建變量。
這些符號在此處進行了簡要說明,但基本上就是您要查找的內容: http : //msdn.microsoft.com/zh-cn/library/aa691095(v=vs.71).aspx

暫無
暫無

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

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