更改连接字符串的MySql上的EntityFramework不会更改结果数据

时间:2013-10-22 13:33:11

标签: mysql entity-framework

我正在使用EntityFramework 5.0和MySql。我已从数据库生成模型,我的应用程序现在必须使用相同的结构数据连接多个数据库。 所以我必须根据一些信息动态更改连接字符串。

我尝试甚至从连接字符串的配置部分和EntityConnectionStringBuilder更改数据库名称,但我得到了相同的结果:我的新连接存储正确,但返回的数据是第一个数据库。

来自WebConfig:

  

add name =“dbIncassiEntities”connectionString =“metadata = res:// /DAL.Modelincassi.csdl|res:// /DAL.Modelincassi.ssdl|res://*/DAL .Modelincassi.msl; provider = Devart.Data.MySql; provider connection string =“user id = root ... database = dbname2”“providerName =”System.Data.EntityClient“/>

来自代码:

EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = providerName;
entityBuilder.ProviderConnectionString = "user id=...database=dbname2";
entityBuilder.Metadata = @"res://*/DAL.Modelincassi.csdl|res://*/DAL.Modelincassi.ssdl|res://*/DAL.Modelincassi.msl";
var context = new dbIncassiEntities(entityBuilder.ToString());

我的构造函数:

public dbIncassiEntities(string conn)
    : base(conn)
{
}

我缺少什么?

更新

我可以看到直接从SqlQuery调用查询,返回的结果是正确的, 在使用生成的实体时,我检索错误的数据。

 var test = context.Database.SqlQuery<string>(
                   "SELECT cognomenome FROM addetto limit 0,1").ToList();

但是打电话..

var oAddetto = from c in context.addettoes select c;

所以我的问题只出在模型上,并手动更改生成的模式

<EntitySet Name="addetto" EntityType="dbIncassiModel.Store.addetto" store:Type="Tables" Schema="dbname2" />

..我会得到正确的信息。

我现在的问题是:如何在代码中更改这些信息? 任何帮助都非常感谢!!

谢谢大卫

2 个答案:

答案 0 :(得分:0)

好的,我现在找到了解决方法。

我只是清除设计师的shema名称,现在我可以成功调用生成的实体。希望这可以帮助其他任何人。

大卫

答案 1 :(得分:0)

虽然我无法删除设计器中的Schema,但我直接在.edmx文件中删除了它。在您选择的XML编辑器中对Schema="YourSchema"进行全文搜索,然后删除条目。之后,更改连接字符串就足够了。

Downnside是,Visual Studio设计师和地图浏览器不再适用。

这似乎更像是dotConnect问题而不是MySQL,因为Oracle适配器也存在这个问题: http://forums.devart.com/viewtopic.php?t=17427