ADO.NET Entity Framework支持多Provider
2008-12-02 16:39 靈感之源 閱讀(6708) 評(píng)論(13) 收藏 舉報(bào)前言
EF跟其它ORM的做法不一樣,其它ORM是先有Model再自動(dòng)維護(hù)數(shù)據(jù)庫(kù),EF是先有數(shù)據(jù)庫(kù)再自動(dòng)(目前只能手工重建來達(dá)到“刷新”的目的)維護(hù)Model的。相比其它ORM,EF最要命的是目前不“內(nèi)置”切換Provider的支持。但微軟的開發(fā)人員給我們提供了以下思路:
參考代碼:http://code.msdn.microsoft.com/EFQuerySamples
參考文章:http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3796966&SiteID=1
具體步驟:
0.前提:各個(gè)類型的數(shù)據(jù)庫(kù)結(jié)構(gòu)完全一致
1.正常添加ADO.NET Entity Data Model(edmx文件),如FooMSSQL,查看Model屬性,元數(shù)據(jù)項(xiàng)目處理,默認(rèn)“嵌入輸出程序集中”,改為“復(fù)制到輸出目錄”,這樣就在輸出目錄產(chǎn)生了3個(gè)文件:FooMSSQL.csdl、FooMSSQL.msl和FooMSSQL.ssdl;
2.如此類推,創(chuàng)建各個(gè)類型的數(shù)據(jù)庫(kù)模型,如FooOracle、FooSQLite等;
3.對(duì)于各個(gè)不同類型的數(shù)據(jù)庫(kù),csdl、msl這2種文件的內(nèi)容是一致的,差異就在于ssdl文件(特定數(shù)據(jù)庫(kù)結(jié)構(gòu)描述);
4.把Foo.Designer.cs代碼改名為Entities.cs(名稱可隨便改)并復(fù)制到任意目錄,如Schemas,同樣復(fù)制csdl、msl(只需要一個(gè)數(shù)據(jù)庫(kù)的),最終該目錄應(yīng)該有這些文件:
a.Entities.cs
b.Foo.csdl
c.Foo.msl
d.FooMSSQL.ssdl
e.FooOracle.ssdl
5.修改ssdl文件中的Provider和ProviderManifestToken屬性為實(shí)際的值;
6.從項(xiàng)目中排除之前添加的數(shù)據(jù)庫(kù)模型文件(*.edmx);
7.把Entities.cs包括進(jìn)來,并選擇Foo.csdl、Foo.msl、FooMSSQL.ssdl、FooOracle.ssdl的屬性為復(fù)制到輸出目錄;
8.在App.config/Web.Config添加各個(gè)數(shù)據(jù)庫(kù)的Provider支持:在connectionStrings字段,你會(huì)發(fā)現(xiàn)之前添加的模型相應(yīng)的ConnectionString已經(jīng)存在,我們不應(yīng)該修改它們,因?yàn)槿绻院笪覀冃薷牧藬?shù)據(jù)庫(kù)結(jié)構(gòu),我們需要重新包含這些edmx文件進(jìn)來并進(jìn)行修改;
你應(yīng)該復(fù)制這些ConnectionString,改名,并且更改csdl、msl、ssdl的路徑,因?yàn)橹癐DE生成的是輸出到bin目錄,而我們實(shí)際用的是Schemas目錄,如在ASP.NET下:
metadata=~/bin/Oracle.csdl|~/bin/Oracle.ssdl|~/bin/Oracle.msl
改為:
metadata=~/bin/Schemas/Foo.csdl|~/bin/Schemas/FooOracle.ssdl|~/bin/Schemas/Foo.msl
注意csdl和msl文件名已經(jīng)改變!
9.最終使用:
public static string ConnectionString = ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings["ConnectionString"]].ConnectionString;
public static Entities GetContext
{
get
{
Entities ent = new Entities(ConnectionString);
ent.Connection.Open();
return ent;
}
}
注意:ConnectionString為剛才在App.config/Web.Config中新增的,推薦在AppSettings中記錄當(dāng)前使用的Provider的名稱,然后就可以隨時(shí)切換
P.S. EF for Oracle
網(wǎng)站:http://code.msdn.microsoft.com/EFOracleProvider
下載運(yùn)行,Provider自動(dòng)添加到GAC
浙公網(wǎng)安備 33010602011771號(hào)