2011-02-04 15 views
5

İki projem var:EntityContainer adı farklı meclislerde benzersiz olmalıdır?

  • Etiketler:

Her ikisi de Entities tanımlayın. Bir konsol uygulamasında

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

çalıştırmayı denediğimde şu hatayı alıyorum:

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 

yerine kullanılabilir mi?

cevap

4

connectionStrings uygulama düzeyinde yapılandırılır ve ContainerName benzersiz bir tanımlayıcı olarak hizmet vermektedir. KapsayıcıAd'larını benzersiz bir değere değiştirin ya da ObjectContext'un varsayılan yapıcısını, belki de birleştirme düzeyinde yapılandırılabilen bir Setting aramasına yeniden uyarlayın.

Düzenleme: bu örnekte bir ObjectContext, News.Data.Entities bir örneğini oluşturarak, bağlam temel sınıf tipik olarak ContainerName ile inşa edilmiştir. Bu parametre, mağaza bağlantısını yapmak için tüm gerekli bilgileri ObjectContext verir ve tüm haritalama işlerini yapar.

Temel olarak, ObjectContext türü ve ContainerName arasında bir ilişkilendirme yapılır. Farklı bir tür olan ikinci bağlam Tags.Data.Entities örneğini başlatırken, bu tür kapsayıcı ile ilişkilendirmek için çalışacağız ve bu aynı ContainerName iki kez ilişkilendiremediğiniz için, bu durum istisna atar.

Sorunu gidermek için, yapabileceğiniz en iyi şey, EDMX'i farklı kapsayıcı adları ile yeniden oluşturmak olabilir. Silme seçeneği yoksa, tasarımcıda ContainerName parametresini değiştirebilir, sonra edmx'i not defterinde açabilir ve 'EntitiesModelStoreContainer' dosyasını arayabilir ve 'Konteynerler' bölümünü yeni ContainerName'ınız ne olursa olsun değiştirebilirsiniz.

+0

Bağlantı bir sorun değil, sınıf adı: – BrunoLM

+0

Biliyorum, ancak kapsayıcı da benzersiz olmalı Uygulama düzeyinde: "ContainerName" ile iki kapsayıcınız var. Yapılandırmada size bir çarpışma vermesi ilk ipucunuz olmalı.Fenner olarak, EF, ObjectContext örneğini benzersiz tanımlayıcıyı sağladığınız EDMX ile ilişkilendirir. = kapsayıcı adı, yapıcı aracılığıyla –

+0

Yukarıdaki yanıtların en yararlı kısmı, EDMX'i doğrudan notepad'e açmanın ayrıntılarıdır. Visual Studio, EDMX'i yalnızca c kapsayıcı adı VS özellik bölmesinde asılı. Benzer soruların önceki cevapları bu ayrıntıya işaret etmede başarısız oldu. –

0

Bunu denedim götürün:

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

Senin sorunun iki proje aynı varlık kapsayıcı adı olması. Onlardan birini (en azından) değiştirmelisiniz.

Düzeltme: Soruyu tam olarak sormak için ... Hayır!

Is it possible to use

News.Data.Entities 
Tags.Data.Entities 

instead of

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

Aynı 'connectiontring' kullanıyorum.' BrunoLM

+0

Ah, görüyorum ... ad = yapıcının bir kısmı kullanılacak bağlantı dizesiydi. – Odhran

+0

, dediğim gibi, farklı varlık kapsayıcı adlarına sahip olmanız gerekir. Bunları NewsEntites ve TagEntities için önerdiğiniz şekilde yeniden adlandırın – Odhran

0

sorun mantığı ile olmayabilir ... Umarım yardımcı olur. Bazen yapı profilleri arasında geçiş yaptığımda karşılaşıyorum. Düzeltmek için tüm geçici dosyaları siliyorum ve temiz bir yapıyorum.

İlgili konular