我在项目中使用EntityFramework连接Mysql数据库。提供商是 Devart Dot.connect。
该应用程序需要使用用户在运行时给出的连接参数连接到数据库。这当然包括 Mysql 数据库名称。
我使用 EntityConnectionStringBuiler 和 EntityConnection 类来构建和存储自定义连接参数。
问题是,即使使用这样的给定参数,应用程序也始终连接到使用 Visual Studio 向导设计 EntityModel 时指定的数据库。
非常奇怪的是,在调试和检查ObjectContext的状态时,自定义的连接参数被正确使用......
这让我很生气!!!!
有什么线索吗?
在这个问题上花了一天时间后,我终于明白问题出在 model.edmx 文件上。
在此文件中,每个 EntitySet 有一行。
每个 EntitySet 元素上都有一个名为 schema 的属性。对于 SQL Server,此属性设置为相关表架构:
实体集名称=“annee_civile”
EntityType =“openemisModel.Store.annee_civile”
商店:类型=“表”架构=“mydatabase”/>
如果您在构建自己的 EntityConnection 时提供了 Schema 的名称,则似乎存在冲突,并且最终,即使您在连接参数中指定了另一个 Schema,仍将使用 edmx 文件中定义的 Schema。
解决方案只需删除 edmx 文件中的架构名称即可。
这适用于 MYSQL,但在连接到 SQL 服务器时可能不适用。
实体集名称=“annee_civile”
EntityType =“openemisModel.Store.annee_civile”
store:Type="Tables" Schema="" />
EntityConnectionStringBuilder :
stringprovidedString =“用户ID=xxxx;密码=xxx;主机=xxxx;数据库=任意数据库名称”;
EntityConnectionStringBuilderEntityConnBuilder = new EntityConnectionStringBuilder();
entityConnBuilder.Provider = "Devart.Data.MySql";
entityConnBuilder.Metadata = @"res:///OpenEmisModel.csdl|res:///OpenEmisModel.ssdl|res://*/OpenEmisModel.msl";
EntityConnBuilder.ProviderConnectionString =providedString;
EntityConnection 和使用它的对象上下文:
EntityConnectionEntityConnexionEmis = new EntityConnection(entityConnBuilder.ConnectionString);
objectcontextEntities testContext = new objectcontextEntities(entityConnexionEmis);
该软件现在可以连接到任何数据库名称。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)