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

c# connection database 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;


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因