DefiningQuery var ama InsertFunction öğesi yok… err


123

Bu şey beni deli ediyor ve hata benim için oldukça anlamsız:

EntitySet 'TableB', bir DefiningQuery'ye sahip olduğundan ve öğede mevcut işlemi destekleyecek hiçbir öğe bulunmadığından güncellenemiyor.

Masalarım şu şekilde yerleştirilmiştir:

TableA
int idA (kimlik, birincil anahtar)
...

TableB
int idA (TableA.idA için FK)
int val

TableB'nin SQL sunucusunda tanımlanmış birincil anahtarı yoktur. Entity Framework, tabloyu ve ilişkilendirmeyi içeri aktarmış ve her iki alanı da anahtar olarak ayarlamıştır. Ama tabloya bir ekleme yapmaya çalıştığımda bu hatayı verecek!

Sorun nedir??


Düzenleme: Alex'in önerdiği gibi çözüm şuydu:

  1. Edmx dosyasına sağ tıklayın, Birlikte aç, XML düzenleyici'yi seçin
  2. Edmx: StorageModels öğesinde varlığı bulun
  3. DefiningQuery'yi tamamen kaldırın
  4. Mağazayı yeniden adlandırın: Schema = "dbo" olarak Schema = "dbo" (aksi takdirde kod, adın geçersiz olduğunu söyleyen bir hata oluşturur)
  5. Mağazayı kaldırın: Name özelliği

Her iki sütunun da anahtarın bir parçası olması benim için sorun olmadığı için anahtarı olduğu gibi bıraktım.


6
Güncelleme için teşekkürler - adım adım talimatlar bu EF newb'nin ASP.NET MVC öğretici uygulamasını çalıştırmasına yardımcı oldu!
Adam Neal

Bunun için teşekkürler! EF'in birincil anahtarı olan sql server 2000 tablosu için uygun edmx dosyası oluşturmaması gibi bir sorun yaşadım. Ama bu talimat beni kurtardı :)
100r

4
3.5 yıl sonra ve bu gönderi hala ppl'ye yardımcı oluyor, bu durumda ME! ... Kime: Adım adım açıklayıcı adım için Palantir (işe yaradı) ve Alex sayesinde >>> Bravo!
nanonerd

Çözüm benim için çalıştı .. Teşekkürler
Delavega

İşin sırrı şema tanımından "store:" öğesini kaldırmaktı. Çok güzel
Guilherme Ferreira

Yanıtlar:


141

Peki, PrimaryKey olmadan bir tabloyla karşılaşıldığında, bu bir Görünüm olarak kabul edilir.

Ve görünümler, StorageModel \ EntitySet [n] \ DefiningQuery öğesinde EDMX dosyasında (görmek için bir XML düzenleyicide açın) gösterilir.

Bir DefiningQuery'niz olduğunda, değişiklik işlevleri eklemediğiniz sürece Varlık salt okunur olur. Ekleme, Güncelleme ve Silme işlemlerinin her biri için 3 değişiklik işlevine (diğer adıyla Saklanan Prosedürler) ihtiyacınız vardır.

Ancak iki seçeneğiniz var:

Anahtar tanımını değiştirin:

  1. Ve EF'i bir görünüm olduğunu düşündüğü şeyin gerçekten bir tablo olduğuna ikna edin
  2. Veya uygun değiştirme işlevlerini ekleyin

Senin durumunda tavsiye ederim (1).


Bir bağlantı tablosuna bir varlık eklemeye çalışırken bu hatayı aldım. Öneriniz düzeltildi, teşekkürler!
Walter Stabosz

o Mükemmel değil ... tnks
Mohan Gundlapalli

İlk önce veritabanından oluşturduğunuz
.edmx

Aynı sorunla karşı karşıyayım, garip yanı, yerel ve test ortamımızda iyi çalışıyor, sadece müşterinin ortamında çalışmıyor (sıkıcı)
Mox Shah

13

Tabloya bir birincil anahtar eklemeniz yeterlidir. Bu kadar. Sorun çözüldü.

ALTER TABLE <TABLE_NAME>
ADD CONSTRAINT <CONSTRAINT_NAME> PRIMARY KEY(<COLUMN_NAME>)

6

Masamda bir birincil anahtar eksikti ve bu hata mesajını aldım. Not ettiğim bir şey, anahtarı tabloya ekledikten sonra, tasarımcıyı kullanarak tabloyu edmx'ten temizlemem, edmx'i kaydetmem ve ardından tabloyu tekrar eklemek için tekrar güncellemem gerekti. Anahtarı almıyordu zaten bir görünüm olarak atandığından. Bu, edmx'in manuel olarak düzenlenmesini gerektirmedi.


5

Tabloya birincil anahtar ekleyin, modeli edmx modelinden silin, ardından veritabanından güncellemeyi seçin, derleyin ve çalıştırın ...... çalışır


1

@Palantir. Her iki tablonuzda da Birincil Anahtarların ayarlandığını doğrulayın ve bir tabloda birden çok birincil anahtar ayarlandığında dikkatli olun.


0
  1. EDMX dosyasını not defterinde veya notepad ++ 'da veya seçtiğiniz herhangi bir metin düzenleyicide manuel olarak açmanız gerekir.
  2. Girdiyi edmx'te bulun: 1. adımda açılan dosyadaki StorageModels.
  3. DefiningQuery öğesini bulun ve bu etiketi tamamen kaldırın.
  4. Mağazayı bulun: Schema = "dbo" to Schema = "dbo" (bu adımı atlarsanız, geçersiz ad hatası oluşturacaktır).
  5. Dosyayı kaydedin ve kapatın.

Umarım sorunu çözer.

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.