ADO.NET Entity Framework: Update Wizard tidak akan menambahkan tabel


93

Saya menambahkan Model Data Entitas ADO.Net baru ke dalam proyek saya dan menggunakan Update Wizard untuk menambahkan tabel ke dalam model. Lima dari tabel yang dipilih ditambahkan ke permukaan desain. Dua tabel lainnya tidak akan ditambahkan. Saya memilihnya di wizard dan mengklik Selesai, namun tidak pernah muncul di permukaan desain.

Apakah ini bug, atau adakah situasi di mana tabel tidak dapat ditambahkan ke model (berdasarkan desain)?


UPDATE: XML (* .edmx) mengungkapkan masalahnya.

<!--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
Ini harus memiliki JAUH lebih banyak suara up. Saya tidak tahu Visual Studio tidak dapat menambahkan tabel karena file .edmx adalah satu-satunya tempat kesalahan sebenarnya terjadi. Mudah-mudahan mereka akan memiliki kotak dialog di v2!
John Bubriski

+1 - Dalam kasus saya, tidak ada pesan kesalahan.
teynon

Seperti yang Anda catat, tabel yang tidak akan diimpor tidak memiliki kunci utama. Tambahkan PK dan Anda siap melakukannya.
Eric

Jawaban:


46

Permukaan desain berbeda dari model entitas. Dimungkinkan untuk memiliki tabel dalam pemetaan di EDMX Anda yang tidak muncul di permukaan desain. Lihat file sebagai XML untuk melihat apakah ini masalahnya. Dalam kasus ini, Wisaya Pembaruan tidak akan mengizinkan Anda untuk menambahkan kembali tabel, karena mereka sudah menjadi bagian dari model entitas. Jadi, secara umum, Update Wizard tahu lebih banyak tentang model entitas Anda daripada tentang permukaan desain, per se .

Saya tidak berpikir itulah situasi Anda saat ini, tetapi itu akan memberi Anda gambaran umum untuk solusinya: masuk ke XML dan cari referensi ke tabel yang dimaksud.


4
Saya baru saja mengalami masalah ini, saya menghapus tabel dari model dan ketika saya menambahkannya lagi, desainer visual tidak menunjukkannya sebagai ada di database. Untuk mengatasinya saya menghapus teks dari file .edmx, tetapi berhasil mengacaukan XML. Jika Anda melakukan ini, harap cadangkan file terlebih dahulu, untuk berjaga-jaga. Untungnya, saya dapat menemukan tag yang kacau dengan git diff.
GrandMasterFlush

42

Tetapkan Kunci Utama ke semua tabel atau hanya satu kotak centang yang tidak dicentang "Izinkan null" ke kolom mana pun dari setiap tabel. Ini bekerja untuk saya :)


2
Ini saya percaya adalah jawaban yang benar, setidaknya untuk saya. Terima kasih!
Eric

@Parvinder, saya telah bergumul tentang masalah ini di sebagian besar proyek saya. Akhirnya, jawaban Anda menjelaskan semuanya bagi saya. Dalam kasus saya, Dalam tabel Bergabung, saya tidak menentukan bidang kunci Bukan nol atau hanya kunci utama. Setelah memperbaiki ini, saya merasa tenang. Terima kasih banyak
PatsonLeaner

Apa yang saya pahami dengan resolusi adalah bahwa kita tidak dapat menambahkan tabel ke dalam Model Entitas jika i) tabel itu tidak memiliki kunci utama atau (ii) Tidak ada kolom Izinkan Null di tabel itu.
Murtuza Khan

10

1. Ubah struktur Tabel dan tambahkan Kolom Utama. Perbarui Model.

2. Ubah file .EDMX di Editor XML dan coba tambahkan tag Kolom Baru di bawah untuk tabel khusus ini. (TIDAK AKAN BEKERJA)

3. Alih-alih membuat Kolom Utama baru ke tabel Keluar, saya akan membuat kunci komposit dengan melibatkan semua kolom yang ada. (BERFUNGSI)

Kerangka Kerja Entitas: Menambahkan DataTable tanpa Kunci Utama ke Model Entitas.


Saya mengalami masalah yang sama. Model Entitas menambahkan tabel, namun tidak ditampilkan di desainer. Saya juga tidak dapat mengaksesnya dalam kode. Saya menambahkan kunci bidang ID ... bekerja!
Ravi Ram

6

Saya memiliki masalah ini juga, semua hal di atas tidak berhasil untuk saya. Yang membantu saya adalah sebagai berikut.

Saat Anda mencoba menyambungkan dengan database, database tersebut dapat memiliki pengguna berbeda dengan kredensial berbeda yang dapat diterima. Misalkan pengguna A hingga D.

Jika Anda mencoba untuk terhubung dengan pengguna pastikan bahwa pengguna memiliki kredensial yang benar diaktifkan, dalam hal ini, opsi baca dan tulis diaktifkan.

Untuk melakukan ini, jalankan MS SQL Server Managment Studio, terhubung dengan server SQL Anda dan pilih database yang Anda coba buat koneksi di studio visual. Di bawah 'your_dbname' -> Security -> Users Anda akan menemukan daftar pengguna. Klik kanan nama pengguna yang Anda coba untuk masuk dan pilih properti. Sebuah jendela terbuka. Pilih halaman 'Umum' (dipilih secara default) dan di bawah tab 'Keanggotaan peran database' pastikan 'db_datareader' dan 'db_datawrite' dipilih.

Catatan: Saat Anda masuk terlalu MS SQL Server Managment Studio pastikan Anda masuk dengan pengguna yang dapat mengaktifkan / menonaktifkan opsi ini ...


5

Periksa 'Nulls' di tabel khusus Anda. Jika semua kolom disetel ke 'Allow Null' Entity Framework menganggapnya sebagai tabel 'Null'. Saya memiliki masalah yang sama dan tidak mencentang 'Allow Null' dan itu menambahkan tabel yang diperlukan.


1
Ia bekerja, bodoh tidak ada kesalahan atau peringatan muncul di log!
RolandoCC



1

Ini telah diatasi dalam versi terbaru (lingkungan: VS 2012, .net framework 4.5). Cukup buka file .edmx dan tambahkan tabel / prosedur tersimpan / tampilan yang diperlukan. Tabel / tampilan yang tidak memiliki kunci utama akan dibuat sebagai tabel / tampilan hanya-baca.

Tabel / tampilan 'TABLE_NAME' tidak memiliki kunci utama yang ditentukan. Kuncinya telah disimpulkan dan definisi dibuat sebagai tabel / tampilan hanya-baca.


1
kesalahan tetap dalam beberapa kasus acara di EF 5.0
Greg Z.

0

Anda tidak perlu menghapus seluruh model (bisa jadi ratusan tabel!).

Wizard dapat menangani item "menambahkan baru", tetapi beberapa perubahan seperti mengubah kunci komposit dan mengganti nama kolom - Wizard tidak tahu apa yang harus dilakukan - sehingga tidak mencoba - dan hal-hal menjadi tidak sinkron.

JADI: HAPUS tabel yang dimaksud dari Model (mode konseptual) DAN dari Model. Store, lalu Perbarui model menggunakan Wizard, dan tambahkan kembali tabel yang dimaksud.


0

Hanya memberikan beberapa detail lebih lanjut untuk siapa saja yang belum pernah melakukan ini sebelumnya. Saya menggunakan visual studio 2013 dengan update 4 diinstal. Saya menambahkan beberapa bidang ke tabel, menghapus tabel dari model saya kemudian pergi untuk memperbarui dan tidak mengizinkan saya memeriksa tabel mana pun.

Saya memiliki kunci utama.

Saya membuat tabel tes baru, yang muncul dan itu akan membiarkan saya memeriksanya tetapi tidak asli saya.

Saya belum pernah membukanya dalam XML sebelumnya dan tidak tahu bagaimana melakukannya. Anda klik kanan pada file .edmx dan "buka dengan" - pilih editor xml.

tabel yang dimaksud ada di sana baik-baik, bahkan ada bidang baru (aneh).

Saya menghapus semua referensi ke sana (butuh beberapa kali) - setelah Anda menghapus satu dan menyimpannya, jika Anda mencoba membukanya dan tidak muncul, lanjutkan saja dan pilih "lihat XML" - lihat kesalahannya dan pada dasarnya ikuti bola yang memantul sampai Anda membersihkannya.

berharap detail ekstra membantu seseorang.

Joe


0

Salah satu cara mudah yang saya temukan adalah (di SQL Server Management Studio) menambahkan kolom ID tipe INT, hapus pilihan "Izinkan Nulls", dan di bawah Properti kolom (ID) >> Spesifikasi Identitas >> periksa (Is Identity), dan buat kenaikan pasti telah ditetapkan.

Setelah hal di atas selesai, kembali ke jendela .edmx Anda, klik kanan, dan Perbarui Model dari Database.


0

Anda dapat menambahkan tabel silang kolom Kunci Utama. Kemudian masalah teratasi


0

Salah satu solusi lain adalah memastikan akun yang Anda akses database melalui memiliki beberapa izin ke tabel, Pilih setidaknya. Tabel tidak akan ditambahkan jika akun tidak memiliki izin untuk itu.

Di SSMS di bawah Keamanan, klik kanan pengguna atau peran, lalu Properti. Kemudian klik Securables. Tabel atas memperlihatkan tabel yang saat ini dapat diakses. Jika tabel yang hilang tidak ada, klik cari dan temukan, sorot tabel di atas, lalu tetapkan izin di tabel bawah

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.