pie*_*rre 4 c# mysql database connection entity-framework
我在项目中使用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);
该软件现在能够连接到任何数据库名称.
希望这可以帮助.