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

时间:2009-08-20 15:45:26

标签: c# mysql database entity-framework connection

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

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

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

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

2 个答案:

答案 0 :(得分:9)

在这个问题上花了一天之后,我终于明白问题来自于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。 / p>

解决方案只是删除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);

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

希望这有帮助。

答案 1 :(得分:0)

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

当您的应用程序启动时并且在数据库操作发生之前,添加以下内容:

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

您需要参考:

using Devart.Data.MySql.Entity.Configuration;