28

我將我的DAL從使用LINQ切換到實體框架。因爲我的應用程序根據當前用戶連接到不同的數據庫,所以我需要在運行時動態創建DataContext並傳遞適當的連接字符串。但是,當我嘗試以編程方式使用舊連接字符串創建實體框架連接時,連接失敗。它抱怨說,它不能識別連接字符串中的密鑰,「服務器」是確切的。爲什麼實體框架連接需要元數據屬性?

我發現我需要這樣做是爲了得到實體框架連接的工作:

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,更不用說它最終會變得非常龐大!

+0

由於映射對於每個連接都是相同的,並且它不會改變,因此我爲它們使用相同的元數據並不重要? – 2009-01-30 21:40:20

+0

是的,這是正確的 – user230910 2016-12-27 08:48:24

回答

9

你會發現這些鏈接內容非常豐富:

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

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

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

24

擴展在Randolpho的回答是:

的元數據屬性明確指向.SSDL(存儲模型)的位置.CSDL(概念模型)和.MSL(映射模型)文件。這三個文件實質上是實體數據模型。 「res://」URI樣式限定符指示文件作爲資源嵌入編譯的EDM程序集中。