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程序集中。

相关问题