EFcodeFirst T4 操縱任意資料庫

2022-07-30 19:18:16 字數 1980 閱讀 6126

之前有寫過兩篇,ef選擇mysql資料來源 跟 ef新增ado.net實體模型處直接選擇oracle資料來源,其方便之處就不多說了,使用dbfirst直接點點點就能與資料庫雙向更新,而且關鍵是方便我們使用t4,如:

(如果你對t4有個大概認識,只會通過ado.net實體模型進行集合遍歷,那麼可以繼續看下去)

但是現在如果要使用其他資料庫,卻又苦於找不到像前兩者一樣的for vs驅動安裝(這裡表揚下mysql跟oracle,良心產品,對我.net還是很友好的),那麼就只能使用codefirst進行ef連線了,但是這樣一來,我們不僅多出手動建立一堆model等的麻煩,而且,關鍵的我們用於t4的.edmx檔案就沒了,這可咋整,t4中如何遍歷???

解決辦法,我一開始覺得有好幾種,無非弄出乙個集合來,一開始我想的是通過建個.cs,每個屬性名跟table名一致,去遍歷屬性,得到table名集合。遺憾的是我tm怎麼也獲取不到屬性!!!

//var itemcollection = typeof(model.modeltest).getproperties();

//var itemcollection = assembly.load("t4test").exportedtypes.where(c=>c.fullname == "t4test.t").firstordefault().getproperties();

#>

然後用了乙個挫辦法,直接檔案讀取,建立乙個.txt檔案,逗號分隔多個表名。

注意:最後乙個逗號不要忽略(這是我**問題,懶得改)

對應的t4:

string itemcollection = new string ;

using (streamreader reader = new streamreader(@"e:\程式設計\c#\t4test\t4test\txtfile.txt"))//注意這裡的檔案路徑是你硬碟的真實路徑,除非你將該txt檔案放到t4生成器一致的目錄下。也很好理解吧?!

#>

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace giser.tmh.idal

}

下面以postgresql為例

2、類庫中新建ado.net實體模型,選擇空codefirst

開啟配置檔案,標記2是nuget驅動的時候自動加上的,標記1需要手動新增,標記3就是你的資料庫連線字串,不多說。

3、開啟你的dbcontext類,新建你的實體類跟對應的dbset屬性。注意的是紅色框選的,改變table對應的「命名空間」,不修改的話,ef生成的sql表名實際上會是dbo.table1,於是就提示table1不存在,很尷尬。熟悉pg的朋友肯定對public.table1熟悉吧,沒錯,改成public即可,具體看圖。

4、新建個控制台程式或web客戶端,同樣要nuget pgsql ef2.2.7,跟上面一樣,然後配置也一樣要修改,重新生成。

測試:目前位置,t4跟pg的codefirst都通了,喜歡跟我一樣用三層的同學,只需要用t4生成所有的partial類。一切又乾淨而方便了。

小公尺電視4a4c4x4s的區別

小公尺電視4a 55英吋延續了小公尺電視以往的簡約時尚風格英吋,採用黑色色彩為主,看起來經典又百搭 搭配64位四核處理器,配置2gb 8gb大儲存 搭載第6代畫質引擎,相比上一代有4處公升級,同步支援hdr10和hybrid log gamma。提供了更多的動態範圍和影象細節,使得暗部更暗,亮部更亮...

SpringMVC4 Hibernate4學習筆記

注 本文是以前幾篇部落格的簡單合併,未做更新 鑑於目前資料大多數都是基於spring3的配置,本人在最初搭建的時候遇到很多問題,由此記錄下來僅供參考 使用的jar檔案springframework4.0.6 為了方便整個先導入 hibernate4.3.6 required 下所有jar 以及 op...

4 星期查詢(4分)

4 星期查詢 4分 題目內容 任意輸入英文的星期幾,通過查詢如圖所示的星期表,輸出其對應的數字,若查到表尾,仍未找到,則輸出錯誤提示資訊。程式執行結果示例1 please enter a string friday friday is 5 程式執行結果示例2 please enter a strin...