ADO.NET Entity Framework: Güncelleme Sihirbazı tablo eklemeyecek


93

Ben yeni ADO.Net Entity Data Model eklendi benim projeye ve kullanılan Güncelleme Sihirbazı modeline tabloları ekleyin. Tasarım yüzeyine seçilen tablolardan beşi eklendi. Diğer iki tablo eklenmeyecek. Bunları sihirbazda seçip Bitir'e tıklıyorum, ancak tasarım yüzeyinde hiç görünmüyorlar.

Bu bir hata mı yoksa bir tablonun modele eklenemediği bazı durumlar var mı (tasarım gereği)?


GÜNCELLEME: XML (* .edmx) sorunu ortaya çıkarır.

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->

8
Bunun WAY daha fazla oy alması gerekir. .Edmx dosyası hatanın gerçekte gittiği tek yer olduğundan, Visual Studio'nun tabloyu ekleyemeyeceği hakkında hiçbir fikrim yoktu. Umarım v2'de bir iletişim kutusu olur!
John Bubriski

+1 - Benim durumumda hata mesajı yoktu.
teynon

Sizin de belirttiğiniz gibi, içe aktarılmayan tabloların birincil anahtarları yoktu. Bir PK ekleyin ve gitmekte fayda var.
Eric

Yanıtlar:


46

Tasarım yüzeyi, varlık modelinden farklıdır. EDMX'inizdeki eşlemede, tasarım yüzeyinde görünmeyen bir tablo olması mümkündür. Durumun bu olup olmadığını görmek için dosyayı XML olarak görüntüleyin. Bu durumda, Güncelleştirme Sihirbazı tabloları yeniden eklemenize izin vermez, çünkü tablolar zaten varlık modelinin bir parçasıdır. Tasarım yüzeyinde, yaklaşık oranla daha Yani, genel olarak konuşursak, Güncelleme Sihirbazı daha fazla varlık modeli hakkında bilir haddi zatında .

İçinde bulunduğunuz durumun tam olarak bu olduğunu sanmıyorum, ancak size çözüm için genel bir fikir vermeli: XML'e gidin ve söz konusu tablolara referanslar arayın.


4
Çok az önce bu problemi yaşadım, modelden bir tabloyu sildim ve tekrar eklemeye gittiğimde görsel tasarımcı onu veritabanında göstermedi. Bunu aşmak için .edmx dosyasındaki metni sildim, ancak XML'i karıştırmayı başardım. Bunu yaparsanız, lütfen her ihtimale karşı önce dosyayı yedekleyin. Neyse ki, git diff ile berbat etiketi bulabildim.
GrandMasterFlush

42

Birincil Anahtarları tüm tablolara veya her tablonun herhangi bir sütununa yalnızca bir işaretlenmemiş onay kutusu "Boş değerlere izin ver" olarak ayarlayın. Benim için çalışıyor :)


2
Bunun doğru yanıt olduğuna inanıyorum, en azından benim içindi. Teşekkürler!
Eric

@Parvinder, projemin çoğunda bu sorunla uğraştım. Sonunda cevabınız benim için her şeyi netleştirdi. Benim durumumda, Katılma tablosunda Boş olmayan anahtar alanını veya sadece birincil anahtarı belirtmedim. Bunu düzelttikten sonra içim rahat oldu. Çok teşekkürler
PatsonLeaner

Çözümle anladığım şey, eğer i) bu tablonun birincil anahtarı yoksa veya (ii) Bu tabloda İzin Ver Null sütunu yoksa Varlık Modeline bir tablo ekleyemeyeceğimizdir.
Murtuza Khan

10

1. Tablo yapısını değiştirin ve bir Birincil Sütun ekleyin. Modeli Güncelleyin.

2. .EDMX dosyasını XML Düzenleyicide değiştirin ve bu belirli tablo için etiketinin altına Yeni Sütun eklemeyi deneyin. (ÇALIŞMAYACAK)

3. Çıkış tablosu için yeni bir Birincil Sütun oluşturmak yerine, mevcut tüm sütunları dahil ederek bir bileşik anahtar yapacağım. (İŞLENMİŞ)

Entity Framework: Varlık Modeline Birincil Anahtar olmadan DataTable Ekleme.


Ben de aynı sorunla karşılaştım. Varlık Modeli tabloyu ekliyordu, ancak tasarımcıda gösterilmiyordu. Ben de kodla erişemedim. Bir kimlik alanı ekledim Anahtar ... işe yaradı!
Ravi Ram

6

Ben de bu problemi yaşadım, yukarıdakilerin hepsi benim için işe yaramadı. Bana yardımcı olan şey şuydu.

Bir veritabanına bağlanmaya çalıştığınızda, bu veritabanının kabul edebileceği farklı kimlik bilgilerine sahip farklı kullanıcıları olabilir. D'ye kadar A kullanıcısı diyelim.

Bir kullanıcıyla bağlantı kurmaya çalışırsanız, kullanıcının doğru kimlik bilgilerinin etkinleştirildiğinden emin olun; bu durumda, okuma ve yazma seçeneklerini etkinleştirin.

Bunu yapmak için SQL sunucunuza bağlı MS SQL Server Managment Studio'yu başlatın ve visual studio'da bağlantı kurmaya çalıştığınız veritabanını seçin. 'Your_dbname' -> Güvenlik -> Kullanıcılar altında bir kullanıcı listesi bulabilirsiniz. Giriş yapmaya çalıştığınız kullanıcı adına sağ tıklayın ve özellikleri seçin. Bir pencere açılır. 'Genel' (varsayılan olarak seçilidir) sayfasını seçin ve 'Veritabanı rolü üyeliği' sekmesi altında 'db_datareader' ve 'db_datawrite'ın seçili olduğundan emin olun.

Not: Siz de oturum açtığınızda MS SQL Server Managment Studio, bu seçenekleri etkinleştirebilecek / devre dışı bırakabilecek bir kullanıcıyla oturum açtığınızdan emin olun ...


5

Belirli tablonuzda 'Null'lar'ı kontrol edin. Tüm sütunlar 'Null'a İzin Ver' olarak ayarlanmışsa, Entity Framework bunu bir 'Boş' tablo olarak kabul eder. Aynı sorunu yaşadım ve 'Null'a İzin Ver' seçeneğinin işaretini kaldırdım ve gerekli tabloyu ekledi.


1
Çalışır, aptalca günlüklerde hiçbir hata veya uyarı görünmez!
RolandoCC


1

Buna çözümüm, tüm modeli silmek ve istediğim yeni tablolar dahil olmak üzere onu yeniden yazmak.

Tasarımcıdaki bir tabloyu yanlışlıkla bir kez sildim ve okuyamadım. Dolayısıyla tüm modeli kaldırıp okuyabilirsiniz.

Bununla ilgili bazı sorunlarım da vardı ( Ado.Net Varlık Veri Modeli Doğru Güncellenmiyor )


1

Bu, en son sürümde çözülmüştür (ortam: VS 2012, .net çerçevesi 4.5). Basitçe .edmx dosyasını açın ve gerekli tabloları / saklı prosedürleri / görünümleri ekleyin. Birincil anahtara sahip olmayan tablo / görünüm, salt okunur tablo / görünüm olarak oluşturulacaktır.

Tablo / görünüm 'TABLE_NAME' tanımlı bir birincil anahtara sahip değil. Anahtar çıkarıldı ve tanım salt okunur bir tablo / görünüm olarak oluşturuldu.


1
Hata bazı durumlarda yine de EF 5.0
Greg Z'de

0

Tüm modeli silmenize gerek yoktur (yüzlerce tablo olabilir!).

Sihirbaz, "yeni" öğeleri ekleyebilir, ancak bileşik anahtarları değiştirme ve sütunları yeniden adlandırma gibi bazı değişiklikleri - ne yapacağını bilmez - bu yüzden denemez - ve işler senkronize olmaz.

SO: Modelden (kavramsal mod) VE Model.Store'dan söz konusu tabloları SİLİN ve ardından Sihirbazı kullanarak modeli güncelleyin ve yalnızca söz konusu tabloları yeniden ekleyin.


0

Bunu daha önce yapmak zorunda olmayanlar için biraz daha ayrıntı atıyorum. Visual Studio 2013'ü güncelleme 4 yüklü olarak kullanıyorum. Bir tabloya bazı alanlar ekledim, tabloyu modelimden sildim sonra güncellemeye gittim ve tabloların hiçbirini kontrol etmeme izin vermedi.

Bir birincil anahtarım var.

Ortaya çıkan yeni bir test masası oluşturdum ve kontrol etmeme izin veriyordu ama orijinalimi değil.

Daha önce hiç XML'de açmadım ve nasıl yapılacağını bilmiyordum. .Edmx dosyasına sağ tıklayın ve "birlikte aç" - xml düzenleyicisini seçin.

söz konusu masa oradaydı, hatta yeni alanlar bile vardı (garip).

Tüm referansları sildim (birkaç kez) - birini silip kaydettikten sonra, açmaya çalışırsanız ve görüntülenmiyorsa, devam edin ve "XML'i görüntüle" yi seçin - hatalara bakın ve temel olarak temizleyene kadar zıplayan topu takip edin.

umarım fazladan ayrıntı birisine yardımcı olur.

Joe


0

Bulduğum kolay bir yol (SQL Server Management Studio'da) INT türünde bir Kimlik sütunu eklemek, "Boş Değerlere İzin Ver" seçeneğinin işaretini kaldırmak ve Sütun özellikleri (Kimlik) >> Kimlik Belirtimi >> kontrol (Kimlik Kimliği) ve yapmaktı emin artış ayarlanmıştır.

Yukarıdakiler tamamlandığında, .edmx pencerenize geri dönün, sağ tıklayın ve Modeli Veritabanından Güncelle.


0

Birincil Anahtar sütun çapraz tablosu ekleyebilirsiniz. O zaman sorun çözülüyor


0

Diğer bir çözüm, veritabanına eriştiğiniz hesabın tablo için bazı izinlere sahip olmasını sağlamaktır, En azından seçin. Hesabın izni yoksa tablo eklenmeyecektir.

SSMS'de Güvenlik altında, kullanıcıya veya role sağ tıklayın, ardından Özellikler'e tıklayın. Ardından, Securables'a tıklayın. Üstteki tablo şu anda erişilebilir olan tabloları göstermektedir. Eksik tablolar yoksa, aramayı tıklayın ve ardından bulun, en üstteki tabloda vurgulayın, ardından alt tabloda izinleri atayın

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.