2011-02-04 93 views
5

我有兩個項目:EntityContainer名稱在不同的程序集中必須是唯一的?

  • News.Data
  • Tags.Data

兩個定義Entities。當我嘗試在一個控制檯應用程序執行

using (var db = new News.Data.Entities("name=Entities")) 
{ 
    results1 = db.News.ToList(); 
} 

using (var db = new Tag.Data.Entities("name=Entities")) 
{ 
    results2 = db.Tag.ToList(); 
} 

我得到這個錯誤:

Schema specified is not valid. Errors: Model1.csdl(3,4) : error 0019: The EntityContainer name must be unique. An EntityContainer with the name 'Entities' is already defined.

是否有可能使用的

News.Data.Entities 
Tags.Data.Entities 

代替

News.Data.NewsEntities 
Tags.Data.TagsEntities 

回答

4

的ConnectionStrings配置成在應用程序級別,並且容器名稱用作唯一標識符。將containerNames更改爲唯一值,或者重新實現 ObjectContext的默認構造函數,或許查找 Setting,這可以在彙編級進行配置。

編輯: 當創建ObjectContextNews.Data.Entities在此實例中的一個實例,該基類的上下文一般與ContainerName構成。此參數爲ObjectContext提供了所有必要的信息以建立其存儲連接,並完成其所有映射業務。

基本上,在ObjectContext類型和ContainerName之間建立關聯。當實例化第二個上下文Tags.Data.Entities(這是不同的類型)時,它會嘗試將該類型與容器相關聯,這是拋出異常的原因,因爲您無法將相同的ContainerName關聯兩次。

爲了解決這個問題,如果可以的話,最好的辦法是重新創建具有不同容器名稱的EDMX。如果刪除不是選項,您可以修改設計器中的ContainerName參數,然後在記事本中打開edmx,然後查找「EntitiesModelStoreContainer」,並將「實體」部分更改爲新的ContainerName。

希望它有幫助...

0

我想你已經試過這樣:

using (var db = new News.Data.Entities("name=NewsEntities")) 
{ 
    results1 = db.News.ToList(); 
} 

using (var db = new Tag.Data.Entities("name=TagEntities")) 
{ 
    results2 = db.Tag.ToList(); 
} 

您的問題是,這兩個項目具有相同的實體容器名稱。您需要更改(至少)其中一個。

編輯:對不起,回答您的確切問題...不!

Is it possible to use

News.Data.Entities 
Tags.Data.Entities 

instead of

News.Data.NewsEntities 
Tags.Data.TagsEntities 
+0

我使用相同的`connectionstring`。` BrunoLM 2011-02-04 14:21:15

+0

啊,我看到了... name =構造函數的一部分是要使用的連接字符串。 – Odhran 2011-02-04 14:40:39

0

這個問題可能不是你的邏輯。有時我在構建配置文件之間切換時遇到此問題。爲了解決這個問題,我刪除了所有的臨時文件並做了一個乾淨的構建

相關問題