為什麼實體框架連接需要元數據屬性?

connection connection-string data-access-layer database entity-framework

我將DAL從使用LINQ切換到Entity Framework。因為我的應用程序根據當前用戶連接到不同的數據庫,所以我需要在運行時動態創建DataContext並傳入適當的連接字符串。但是,當我嘗試使用舊連接字符串以編程方式創建實體框架連接時,連接失敗。它抱怨它沒有識別連接字符串中的密鑰,確切地說是“服務器”。

我發現我需要這樣做才能使Entity Framework連接正常工作:

EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = "System.Data.SqlClient";
entityBuilder.ProviderConnectionString = clientConnectionString;
entityBuilder.Metadata = "res://*/xxxxxxxxxx.csdl...";
Entities entities = new Entities(entityBuilder.ToString());

為什麼是這樣?
什麼是元數據屬性?
對於多個不同的連接,它總是一樣的問題嗎?
它應該是什麼?
有沒有辦法解決?

提前致謝!

更新1:感謝Randolpho的更新,但......
我遇到此問題的全部原因是我無法將連接字符串存儲在配置文件中。連接字符串在運行時由用戶連接動態確定。

這是我的確切場景:
如果用戶A正在連接,則應用程序從數據庫A中提取數據。如果用戶B正在連接,則應用程序從數據庫B中提取數據。
連接字符串存儲在主數據庫中,並且該數字可能是無限的。每次添加用戶時,我都不想進入web.config,更不用說它最終會變得巨大!

一般承認的答案

您會發現這些鏈接非常有用:

http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.connectionstring.aspx

http://weblogs.asp.net/pgielens/archive/2006/08/21/ADO.NET-Entity-Framework-Metadata.aspx

底線?實體框架需要元數據來構建實體映射。

此外,您應該考慮將連接信息移到配置文件中,而不是在代碼中構建它。第一個鏈接將告訴您如何做到這一點。


熱門答案

擴展Randolpho的答案:

元數據屬性專門指向.SSDL(存儲模型),。CSDL(概念模型)和.MSL(映射模型)文件的位置。這三個文件基本上是實體數據模型。 “res://”URI樣式限定符表示文件作為資源嵌入到已編譯的EDM程序集中。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因