Kei*_*ows 38 .net c# entity-framework exception-handling visual-studio
有一点背景:
我有一个DLL项目具有以下结构:
Rivworks.Model (project)
\Negotiation (folder)
Model.edmx (model from DB #1)
\NegotiationAutos (folder)
Model.edmx (model from DB #2)
Run Code Online (Sandbox Code Playgroud)
我已将连接字符串从此项目的app.config移动到web.config文件.它们不在 ConnectionString部分中.相反,我有一个静态类,它消耗部分web.config并将它们作为AppSettings公开给我的应用程序.[settingName].
<FeedAutosEntities_connString>metadata=res://*/;provider=System.Data.SqlClient;provider connection string='Data Source=db4;Initial Catalog=RivFeeds;Persist Security Info=True;User ID=****;Password="****";MultipleActiveResultSets=True'</FeedAutosEntities_connString>
<RivWorkEntities_connString>metadata=res://*/NegotiationAutos.NegotiationAutos.csdl|res://*/NegotiationAutos.NegotiationAutos.ssdl|res://*/NegotiationAutos.NegotiationAutos.msl;provider=System.Data.SqlClient;provider connection string='Data Source=db2;Initial Catalog=RivFramework_Dev;Persist Security Info=True;User ID=****;Password="****";MultipleActiveResultSets=True'</RivWorkEntities_connString>
Run Code Online (Sandbox Code Playgroud)
我有2个类,每个上下文一个,它们看起来像这样:
namespace RivWorks.Model
{
public class RivWorksStore
{
private RivWorks.Model.Negotiation.Entities _dbNegotiation;
public RivWorksStore(string connectionString, string metadata, string provider)
{
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.ConnectionString = connectionString;
entityBuilder.Metadata = "res://*/"; // metadata;
//entityBuilder.Provider = provider;
_dbNegotiation = new RivWorks.Model.Negotiation.Entities(entityBuilder.ConnectionString);
}
public RivWorks.Model.Negotiation.Entities NegotiationEntities()
{
return _dbNegotiation;
}
}
}
namespace RivWorks.Model
{
public class FeedStoreReadOnly
{
private RivWorks.Model.NegotiationAutos.Entities _dbFeed;
public FeedStoreReadOnly(string connectionString, string metadata, string provider)
{
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.ConnectionString = connectionString;
entityBuilder.Metadata = "res://*/"; // metadata;
//entityBuilder.Provider = provider;
_dbFeed = new RivWorks.Model.NegotiationAutos.Entities(entityBuilder.ConnectionString);
}
public RivWorks.Model.NegotiationAutos.Entities ReadOnlyEntities()
{
return _dbFeed;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您将注意到MetaData正在被重写为简短版本.
当我在每个类中注释掉该行时,我收到此错误:
无法加载指定的元数据资源.
当我在每个班级中留下该行时,我收到此错误:
指定的架构无效.错误:
Negotiation.Model.csdl(3,4):错误0019:EntityContainer名称必须是唯一的.已定义名为"实体"的EntityContainer.
我知道这很简单,很明显.欢迎任何建议......
jpo*_*jpo 149
劫持此问题,因为它是错误消息的最高Google结果.
如果其他人在仅使用单个模型/上下文时遇到此问题:我曾遇到过这个问题,因为包含模型/上下文的程序集已重命名,并且具有先前名称的副本仍保留在应用程序的bin目录中.解决方案是删除旧的程序集文件.
Cra*_*ntz 46
您的两个EDMX文件可能具有相同的实体容器名称.您需要更改(至少)其中一个.
在GUI设计器中,打开模型浏览器.查找名为"EntityContainer:Entities"的节点.点击它.在"属性"中,更改Name为其他内容.保存并重建.
小智 13
我也有问题,但我的解决方案是清理bin目录,然后删除具有实体容器名称的连接字符串.然后我可以重命名我的实体并放回连接字符串.
| 归档时间: |
|
| 查看次数: |
43403 次 |
| 最近记录: |