EntityContainer名称必须是唯一的。已经定义了一个名称为“Entities”的EntityContainer [英] The EntityContainer name must be unique. An EntityContainer with the name 'Entities' is already defined

查看:148
本文介绍了EntityContainer名称必须是唯一的。已经定义了一个名称为“Entities”的EntityContainer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我有一个具有以下结构的DLL项目:

 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ b $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 
b Model.edmx(来自DB#2的模型)

我已经从此项目的应用程序中移动了连接字符串.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 =& quot; ****& quot ;; 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 =& quot; ****& quot ;; MultipleActiveResultSets =真'< / RivWorkEntities_connString>

我有2个类,每个上下文一个,它们如下所示:

 命名空间RivWorks.Model 
{
public class RivWorksStore
{
private RivWorks.Model.Negotiation。实体_db谈判;

public RivWorksStore(string connectionString,string metadata,string provider)
{
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.ConnectionString = connectionString;
entityBuilder.Metadata =res:// * /; //元数据;
//entityBuilder.Provider = provider;
_dbNegotiation = new RivWorks.Model.Negotiation.Entities(entityBuilder.ConnectionString);
}

public RivWorks.Model.Negotiation.Entities NegotiationEntities()
{
return _dbNegotiation;
}
}
}

命名空间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:// * /; //元数据;
//entityBuilder.Provider = provider;
_dbFeed = new RivWorks.Model.NegotiationAutos.Entities(entityBuilder.ConnectionString);
}

public RivWorks.Model.NegotiationAutos.Entities ReadOnlyEntities()
{
return _dbFeed;
}
}
}

您将注意到MetaData正在被重写为一个简短的版本。



当我在每个类别中注释掉该行时,我会收到以下错误:


无法加载指定的元数据资源


当我在每个类中留下该行时,我会收到以下错误:


指定的模式无效。错误:



Negotiation.Model.csdl(3,4):错误0019:EntityContainer名称必须是唯一的。已经定义了一个名称为Entities的EntityContainer。


我知道这很简单,很明显。任何建议欢迎...

解决方案

您的两个EDMX文件可能具有相同的实体容器名称。你需要改变(至少)其中之一。



在GUI设计器中,打开模型浏览器。查找一个表示EntityContainer:Entities的节点。点击它。在属性中,将名称更改为其他内容。保存并重建。


For a little background:

I have a DLL project with the following structure:

Rivworks.Model (project)  
  \Negotiation (folder)  
      Model.edmx (model from DB #1)  
  \NegotiationAutos (folder)  
      Model.edmx (model from DB #2)  

I have moved the connection strings from this project's app.config to the web.config file. They are not in the ConnectionString section. Rather, I have a static class that consumes part of the web.config and exposes them to my app as 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=&quot;****&quot;;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=&quot;****&quot;;MultipleActiveResultSets=True'</RivWorkEntities_connString>

I have 2 classes, one for each Context and they look like this:

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;
        }
    }
}

You will note that the MetaData is being rewritten to a short version.

When I comment out that line in each class I get this error:

Unable to load the specified metadata resource.

When I leave that line in in each class I get this error:

Schema specified is not valid. Errors:

Negotiation.Model.csdl(3,4) : error 0019: The EntityContainer name must be unique. An EntityContainer with the name 'Entities' is already defined.

I know it is something simple, something obvious. Any suggestions welcome...

解决方案

Your two EDMX files probably have the same entity container name. You need to change (at least) one of them.

In the GUI designer, open Model Browser. Look for a node that says "EntityContainer: Entities". Click it. In Properties, change Name to something else. Save and rebuild.

这篇关于EntityContainer名称必须是唯一的。已经定义了一个名称为“Entities”的EntityContainer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆