0

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

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

来自 WebConfig:

添加名称="dbIncassiEntities" connectionString="metadata=res:// /DAL.Modelincassi.csdl|res:// /DAL.Modelincassi.ssdl|res://*/DAL.Modelincassi.msl;provider=Devart.Data .MySql;provider 连接字符串="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" />

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

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

谢谢,大卫

4

2 回答 2

0

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

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

大卫

于 2013-10-23T17:04:21.823 回答
0

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

缺点是,Visual Studio 设计器和映射资源管理器将无法正常工作。

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

于 2015-09-01T15:11:26.380 回答