如何更改数据库 – Entity Framework使用的架构(mysql数据库)?

我在项目中使用EntityFramework连接到Mysql数据库。 提供者是Devart Dot.connect。

此应用程序需要使用用户在运行时提供的连接参数连接到数据库。 这当然包括Mysql数据库名称。

我使用EntityConnectionStringBuiler和EntityConnection类来构建和存储自定义连接参数。

问题是即使使用这样的给定参数,应用程序也总是连接到使用visual studio向导设计EntityModel时命名的数据库。 非常奇怪的是,当调试和检查ObjectContext的状态时,自定义连接参数被正确使用……这让我很生气!!!!! 任何线索?

在这个问题上花了一天之后,我终于明白问题来自于model.edmx文件。

在此文件中,每个EntitySet有一行。 在每个EntitySet元素上都有一个名为schema的属性。 在SQL Server的情况下,此属性设置为相关的表架构:

EntitySet Name =“annee_civile”EntityType =“openemisModel.Store.annee_civile”store:Type =“Tables”Schema =“mydatabase”/>

如果在构建您拥有EntityConnection时提供Schema的名称,则似乎存在冲突,并且最终,即使您在连接参数中指定了另一个,也将使用edmx文件中定义的Schema。

解决方案只是删除edmx文件中的模式名称。 这适用于MYSQL,可能不是在连接到SQL服务器时。

EntitySet Name =“annee_civile”EntityType =“openemisModel.Store.annee_civile”store:Type =“Tables”Schema =“”/>

EntityConnectionStringBuilder:

string providedString =“User Id = xxxx; Password = xxx; Host = xxxx; Database = anydatabasename”; EntityConnectionStringBuilder entityConnBuilder = new EntityConnectionStringBuilder(); entityConnBuilder.Provider =“Devart.Data.MySql”; entityConnBuilder.Metadata = @“res:// /OpenEmisModel.csdl|res:// /OpenEmisModel.ssdl|res://*/OpenEmisModel.msl”; entityConnBuilder.ProviderConnectionString = providedString;

EntityConnection和使用它的对象上下文:

EntityConnection entityConnexionEmis = new EntityConnection(entityConnBuilder.ConnectionString);

objectcontextEntities testingContext = new objectcontextEntities(entityConnexionEmis);

该软件现在能够连接到任何数据库名称。

希望这可以帮助。

在项目中引用dll Devart.Data.MySql.Entity.EF6.dll。

在应用程序启动时和数据库操作发生之前的某处,添加以下内容:

var config = MySqlEntityProviderConfig.Instance; config.Workarounds.IgnoreSchemaName = true; 

您需要参考:

 using Devart.Data.MySql.Entity.Configuration;