Neden bu hatayı alıyorum: Aşağıdaki EntitySet / AssociationSet - Entity1 için eşleme belirtilmedi mi?


97

Model First yaklaşımıyla Entity Framework 4 kullanıyorum.

Projeye başladım, varlıkları tasarladım ve veritabanını oluşturdum. Her şey yolunda gitti.

Sonra geri dönüp modelime başka bir varlık eklemem gerekiyordu. Ancak, bir varlığı EDMX'e sürüklerken şu hatayı alıyorum:

görüntü açıklamasını buraya girin

Peki! Varlık1'i bir tabloyla eşleştirmem gerekiyor .. Ama hey! Model First yaklaşımını kullanıyorum, DDL'yi oluşturduğumda benim için tablo oluşturmasını bekliyorum.

Bu hatayı nasıl aşarım?


1
Modelinizden veritabanı komut dosyası oluşturabilir misiniz?
Ladislav Mrnka

Yanıtlar:


147

Bunun nedeni, EF4'ün model öncelikli olarak çalışma biçimidir.

Modeli ilk oluşturduğunuzda, SSDL'nin olmadığı bir durumdadır. Varlıkları sürükleyebilir, ilişkilendirebilir ve benzerlerini yapabilirsiniz ve yine de, EDMX dosyasındaki SSDL'ye bakarsanız, varlıkların hiçbirinin SSDL'de ilişkili bir depolama tablosu olmadığını göreceksiniz.

Bu, Generate Database From Modelbağlam menüsü öğesine tıkladığınızda değişir . Kafa karıştırıcı kısım, bu eylemin basitçe bir DDL komut dosyası oluşturmaktan daha fazlasını yapmasıdır. Aslında, EDMX dosyasını SSDL bilgilerini içerecek şekilde değiştirir. Bu noktadan itibaren, EDMX dosyası tasarımcı / CSDL'deki her varlığın SSDL'deki bir varlıkla eşleşmesi gereken bir duruma girecektir. Biri eşlenmezse, bir derleme zamanı hatasını tetikler:

Aşağıdaki EntitySet / AssociationSet için eşleme belirtilmedi - (EntityName)

Bir başka ilginç gerçek ise, derlemeyi engelleyecek türden bir hata olmamasıdır. Aslında, çıktı sınıfı kitaplığını oluşturacaktır. Bir uyarı falan olması gerekmez mi?

Bu hatayı önlemek için, yeni bir varlık ekledikten sonra yapmanız gereken tek şey Generate Database From Modeltekrar yapmaktır . Bu, SSDL'yi güncelleyecek ve eşlemeleri düzeltir.

DÜZENLE

Modeli önce kullanmıyorsanız ve "veri tabanından güncelleme yaparsanız", DB Sunucusundaki bir tabloyu sildiğinizde de bu hatayı alırsınız. Bunun nedeni, Entity Framework'ün varlığı sizin için otomatik olarak silmemesidir. Varlığı manuel olarak silin ve hata ortadan kalkar.


1
Modelimi bd değişikliklerine göre güncelledikten sonra aynı sorunu yaşadım (bu iyi olamaz çünkü yaklaşımım model öncelikli değil).
balanza

5
@balanza, modeli ilk kullanmadığınızda ve modelinizi veritabanına göre güncellediğinizde, sunucudaki bir tabloyu sildiğinizde bu hatayı alırsınız çünkü EF tasarımcısı varlığı otomatik olarak SİLMEZ. Varlık türünü manuel olarak sildiğinizde, hata ortadan
kalkar

Benimkini doğrudan varlık veri modelinin xml dosyasında değiştirdim. Bir yığın tablo ve işlevim vardı ve bazı uyumsuzluk riski vardı, bu yüzden manuel olarak yaptım.
Bat_Programmer

Bu SÜPER faydalıdır. Ayrıca, model öncelikli kullanıyorsanız ve "veritabanından güncelle" kullanıyorsanız ve yeni tablolar alırsanız, hata da alırsınız. Ancak Modelden Veritabanı Oluştur'u çalıştırmak (oluşturulan betiği gerçekten yürütmeye gerek yoktur - verilerinizi öldürecektir!) Kodunuzdaki eşleme sorunlarını çözecektir ve ileride onu kullanırken sorun yaşamayacaksınız.
Brian Warshaw

1
Zaten dağıtılmış SQL Server CE veritabanı için şema güncellemesini nasıl yaparsınız? Tamamen ilgisiz bir prosedürse, bunu ayrı bir soruya taşıyabilir
FYK

35

Aynı hatayı aldığımı fark ettim çünkü iki varlık arasında bir ilişki oluşturduktan sonra referans kısıtlaması oluşturmayı unutmuştum.


13
Bilginize: İlişkilendirmenin özelliklerini kontrol edin ve alttaki "Bilgi Kısıtlaması" boş olacaktır. Üç noktaya tıklayın ve bir sınırlama oluşturun.
Patrice Calvé

Bu bana yardımcı oldu. Menşe varlığımdan seyrüsefer varlığımla 1 .. * ilişkisi oluşturmak zorunda kaldım.
duyn9uyen

21

Hata 3027: Aşağıdaki EntitySet / AssociationSet ... "için eşleme belirtilmedi ..." - Entity Framework baş ağrıları

Entities Framework ile model geliştiriyorsanız, zaman zaman bu can sıkıcı hatayla karşılaşabilirsiniz:

Hata 3027: Aşağıdaki EntitySet / AssociationSet [Varlık veya İlişkilendirme Adı] için eşleme belirtilmedi

Bu, EDM'de her şey yolunda göründüğünde bir anlam ifade etmeyebilir, ancak bunun nedeni, bu hatanın genellikle EDM ile hiçbir ilgisi olmamasıdır. Söylemesi gereken şey "veritabanı dosyalarınızı yeniden oluşturun".

Görüyorsunuz, Varlıklar, derleme sırasında SSDL ve MSL'yi kontrol eder, bu nedenle EDM'nizi yeni değiştirdiyseniz ancak Veritabanı Modeli Oluştur'u kullanmıyorsanız ... o zaman sql komut dosyalarınızda eksik şeyler olduğundan şikayet eder.

Yani kısaca çözüm şudur: " Model ilk geliştirme yapıyorsanız, EDM'nizi güncelledikten sonra her seferinde Veritabanı Modeli Oluşturmayı unutmayın . Umarım probleminiz çözülmüştür".


Bu, Generate Database Modelini yaparken aynı hata için çalıştı, istisnayı
gidermeye

7

Benim durumumda, başka bir geliştirici temeldeki veritabanından bazı tabloları kaldırmıştı. Bunu fark edip bu tabloları varlıktan kaldırdığımda sorun çözüldü. Göründüğü kadar açık değildi.


6

Aynı hatayla karşılaştım ama önce modeli kullanmıyordum. EDMX dosyamın, tasarımcıda görünmese bile bir tabloya referans içerdiği ortaya çıktı. İlginç bir şekilde, Visual Studio'da (2013) tablo adı için bir metin araması yaptığımda tablo bulunamadı.

Sorunu çözmek için, EDMX dosyasındaki rahatsız edici tabloya referans bulmak için harici bir düzenleyici (Notepad ++) kullandım ve sonra (dikkatlice) tabloya yapılan tüm referansları kaldırdım. Öncelikle EDMX dosyasının bu duruma nasıl girdiğini bilmediğimi söylediğim için üzgünüm.


5

Bir tablo değişikliğim vardı ve sonunda 1 numaralı ( MyEntity1ve a gibi MyEntity) edmx model tarayıcısı tarafından onaylanan başka bir varlık oluşturdu . İki varlık hakkında bir şeyler birlikte işlemeyi karıştırdı.

Tablonun kaldırılması ve yeniden eklenmesi sorunu çözdü.


TFS bağlıysa, silme işleminden sonra edmx'i kontrol edin. O zaman ve ancak o zaman en yenisini alın ve kesin iki adımlı bir süreçte yeniden ekleyin. Aksi takdirde TFS, sorunlara neden olduğu görülen aynı adlandırılmış varlık (lar) ın silinmesi ve yeniden eklenmesi ile karıştırılır.


Masa değişikliğinden sonra aynı sorunu yaşadım. Modelin altında birkaç yerde 1 ve 2 numaralı (MyEntity1, MyEntity2) aynı varlıkları buldum. Her şubeye (Diyagramlar, Varlık Türleri, vb.) Baktım ve MyEntity ve MyEntity [n] 'nin her örneğini kaldırdım. İyi bir önlem için "Temiz Çözüm" yaptım ve ardından veritabanından yalnızca MyEntity'yi yeniden eklemek için güncelledim.
MsTapp

4

Benim için daha hızlı bir yol, tabloları silip yeniden eklemekti. Onları otomatik olarak eşleştirdi. :)


2

Database FirstYaklaşımı kullananlar için, yeni bir varlık ekledikten sonra tek yapmanız gereken Generate Database From Model, .edmxdosyanıza sağ tıklayıp seçim yapmaktır.Generate Database From Model...


0

Veritabanından bir tablo sildiğimde bu hatayı aldım. EDMX diyagramına sağ tıklayarak, Özellikler'e giderek, Özellikler penceresindeki listeden tabloyu seçerek ve diyagramdan silerek (silme tuşunu kullanarak) sorunu çözdüm.


0
  1. Çözüm Gezgini'ne gidin, Ara düğmesine tıklayın
  2. Bırak işaretli hem Search within file contentveSearch External Files
  3. Eşlemenizin tanımadığı varlıkların adını yazın.
  4. Sorunla İLGİLİ tüm dosyaları silin. Bunlara muhtemelen aynı kayıp varlığın adı verilecektir. Dosyadaki Bağlam Sınıfı adınıza sahip herhangi bir dosyayı, özellikle uzantıları .cs veya .tt ise SİLMEYİN. Context .cs dosyasında .
  5. eksik varlığı referans alan tüm kod satırlarını kaldırın. Şöyle görünecekler:

    public virtual DbSet< Entity1> Entity1 { get; set; }
    

Bu hata, veritabanından silinen tablolarda yaygındır.

Veritabanındaki bir tabloyu düşürdüğünde veya web.config.connectionStringsEF Mapped veritabanını değiştirdiğinde, sorun orijinal eşlemeleri oluşturmak için kullanılan değil, yenisini işaret edecek şekilde değiştirilir.

Bu yeni db, 3027 hatası olan bu varlıklar mevcut değil.


0

Bir saklı yordam için özel bir sonuç yapmaya çalışırken hata aldım ve bunun bir varlık olması gerektiğini varsaydım.

Çözüm, Model tarayıcısında karmaşık bir tür oluşturmam ve bunu sonuç olarak "Düzenle işlev içe aktarmaları" na atamamdı.

Buraya ekleyeceğim çünkü bu soru, bu hatayı aldığınızda Google'ın sizi götürdüğü yer gibi görünüyor.


0

Her şeyi doğru ayarlamıştım (kardinaliteler ve bağımlı özellikler) ancak neden sürekli hata almaya devam ettiğimi anlayamadım. Son olarak, EF'nin bağımlı tabloda kendi başına bir sütun oluşturduğunu (table_tablecolumn) ve tabloyla herhangi bir ilişkisi olmadığını, dolayısıyla eşleştirme belirtilmediğini anladı. EDMX dosyasındaki sütunu silmek ve sorunu düzelten çözümü yeniden oluşturmak zorunda kaldım. DB yaklaşımını kullanıyorum.


0

Veritabanından Güncelleme Modeli benim için çalışmıyor.

Çakışan varlığı kaldırmam, ardından Veri Tabanından Güncelleme Modeli'ni çalıştırmam ve son olarak çözümü yeniden oluşturmam gerekiyordu. Ondan sonra her şey yolunda gidiyor.


0

Bunu başkaları için paylaşmak. Benim durumumda, paylaşılan bir MVC çözümü üzerinde çalışıyorduk ve açılır menüler için kullandığımız tablolar için ortak bir modül kullanıyorduk. Varlık modelini yeni bir tablo ekleyerek güncellediğimde hata aldım. EDMX'i güncellediğimde, muhtemelen veritabanına erişim hakkımı güncellediği ortaya çıktı, bu da bana verilen belirli tabloya erişimim olmamasına neden oldu no mapping specified.

Sadece yeniden eklemek ve kullanıcıma erişim vermek sorunu çözdü.


0

Sanırım bunu, yeniden adlandırmadan ve yeniden eklemeden önce bazı tabloları edmx'ten açıkça silmemekten anladım. Bunun yerine, tabloları yeniden adlandırdım ve ardından Veritabanından bir Güncelleme Modeli yaptım, onların kaybolacağını düşündüm ve onları modelden sildim. Daha sonra Veritabanından başka bir Güncelleme Modeli yaptım ve yeniden adlandırılmış tabloları ekledim.

Site yeni tablolarla çalışıyordu, ancak hata aldım. Sonunda, orijinal tabloların hala modelde olduğunu fark ettim. Bunları modelden sildim (edmx ekranında tıklayın, tuşu sil) ve sonra hata ortadan kalktı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.