在经过一天的研究后,我终于明白问题出在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,即使你在连接参数中指定了另一个Schema。
解决方案很简单,只需删除edmx文件中Schema的名称。对于MYSQL而言,这种做法可行,但可能不适用于连接到SQL Server的情况。
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和使用它的ObjectContext:
EntityConnection entityConnexionEmis = new EntityConnection(entityConnBuilder.ConnectionString);
objectcontextEntities testingContext = new objectcontextEntities(entityConnexionEmis);
现在软件能够连接到任何数据库名称了。希望这能对你有所帮助。