我在项目中使用EntityFramework连接到Mysql数据库。提供者是Devart Dot.connect。
此应用程序需要使用用户在运行时提供的connexion参数连接到数据库。这当然包括Mysql数据库名称。
我使用了EntityConnectionStringBuiler和EntityConnection类来构建和存储自定义连接参数。
问题是,即使使用这些给定的参数,应用程序在使用visual studio向导设计EntityModel时也始终连接到名为的数据库。非常奇怪的是,当调试和检查ObjectContext的状态时,自定义连接参数被正确使用...这让我发疯!有什么线索吗?
发布于 2009-08-20 08:11:17
在这个问题上花了一天时间后,我终于明白问题出在model.edmx文件上。
在这个文件中,每个EntitySet占一行。在每个EntitySet元素上,都有一个名为schema的属性。在SQL Server中,此属性设置为相关的表架构:
EntitySet Name="annee_civile“EntityType="openemisModel.Store.annee_civile”store:Type="Tables“Schema="mydatabase”/>
如果您在构造自己的EntityConnection时提供架构的名称,则似乎存在冲突,最后,即使您在连接参数中指定了另一个架构,也将使用edmx文件中定义的架构。
解决方案只是在edmx文件中删除模式的名称。这适用于MYSQL,但在连接到SQL服务器时可能不起作用。
EntitySet Name="annee_civile“EntityType="openemisModel.Store.annee_civile”store:Type="Tables“Schema="”/>
EntityConnectionStringBuilder:
用户字符串providedString =“@"res:///OpenEmisModel.csdl|res:///OpenEmisModel.ssdl|res://*/OpenEmisModel.msl";entityConnBuilder =
EntityConnectionStringBuilder();entityConnBuilder.Provider = "Devart.Data.MySql";entityConnBuilder.Metadata = new entityConnBuilder.ProviderConnectionString = providedString;
EntityConnection和使用它的对象上下文:
新的EntityConnection(entityConnBuilder.ConnectionString);=
EntityConnection entityConnexionEmis
objectcontextEntities testingContext =新的objectcontextEntities(entityConnexionEmis);
该软件现在可以连接到任何数据库名称。
希望这能有所帮助。
发布于 2016-06-14 02:15:00
引用项目中的dll Devart.Data.MySql.Entity.EF6.dll。
在应用程序启动时的某个位置,在数据库操作发生之前,添加以下内容:
var config = MySqlEntityProviderConfig.Instance;
config.Workarounds.IgnoreSchemaName = true;
您需要参考以下内容:
using Devart.Data.MySql.Entity.Configuration;
https://stackoverflow.com/questions/1307083
复制