我在项目中使用EntityFramework连接到Mysql数据库。提供者是Devart Dot.connect。
此应用程序需要使用用户在运行时给出的连接参数连接到数据库。这当然包括Mysql数据库名称。
我使用EntityConnectionStringBuiler和EntityConnection类来构建和存储自定义连接参数。
问题是即使使用这样的给定参数,应用程序也总是连接到使用visual studio向导设计EntityModel时命名的数据库。 非常奇怪的是,当调试和检查ObjectContext的状态时,正确使用自定义连接参数... 这让我很生气!!!!! 任何线索?
答案 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;