Pada dasarnya saya mendapat tabel di basis data EF saya dengan properti berikut:
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Image { get; set; }
public string WatchUrl { get; set; }
public int Year { get; set; }
public string Source { get; set; }
public int Duration { get; set; }
public int Rating { get; set; }
public virtual ICollection<Category> Categories { get; set; }
Namun berfungsi dengan baik ketika saya mengubah int dari Rating menjadi dua kali lipat saya mendapatkan kesalahan berikut saat memperbarui database:
Objek 'DF_ Movies _Rating__48CFD27E' tergantung pada kolom 'Rating'. ALTER TABLE ALTER COLUMN Peringkat gagal karena satu atau lebih objek mengakses kolom ini.
apa masalahnya?
sql
sql-server
database
entity-framework
entity-framework-4
Jordan Axe
sumber
sumber
Jawaban:
Coba ini:
Hapus kendala DF_Movies_Rating__48CFD27E sebelum mengubah jenis bidang Anda.
Batasan biasanya dibuat secara otomatis oleh DBMS (SQL Server).
Untuk melihat kendala yang terkait dengan tabel, perluas atribut tabel di Object explorer , diikuti oleh kategori Kendala seperti yang ditunjukkan di bawah ini:
Anda harus menghapus kendala sebelum mengubah jenis bidang.
sumber
update-database
ulang lagi saya memposting masalah ini: stackoverflow.com/questions/40267769/…Inilah
tsql
caranyaUntuk kelengkapan, ini hanya menunjukkan komentar @ Jo Taras sebagai jawaban
sumber
Saya menambahkan ini sebagai jawaban untuk menjelaskan dari mana kendala berasal. Saya mencoba melakukannya di komentar tetapi sulit untuk mengedit dengan baik di sana: - /
Jika Anda membuat (atau mengubah) tabel dengan kolom yang memiliki nilai default, itu akan membuat kendala untuk Anda.
Di meja Anda, misalnya, mungkin:
Ini akan membuat batasan untuk default 100.
Jika Anda malah membuatnya seperti itu
Kemudian Anda mendapatkan batasan nama yang bagus yang lebih mudah untuk referensi ketika Anda mengubah tabel tersebut.
Anda dapat menggabungkan 2 pernyataan terakhir itu sehingga Anda mengubah kolom dan memberi nama kendala dalam satu baris (Anda harus melakukannya jika itu adalah tabel yang sudah ada)
sumber
Karena constraint memiliki nama yang tidak dapat diprediksi, Anda dapat menulis skrip khusus ( DropConstraint ) untuk menghapusnya tanpa mengetahui namanya (diuji di EF 6.1.3):
sumber
MS SQL Studio berhati-hati ketika Anda menghapus kolom tetapi jika Anda perlu Hapus Batasan Secara program di sini adalah solusi sederhana
Berikut cuplikan kode yang akan menjatuhkan kolom dengan batasan default:
Cukup ganti TableName dan ColumnName dengan nilai yang sesuai. Anda dapat menjalankan ini dengan aman bahkan jika kolom sudah dijatuhkan.
Bonus : Inilah kode untuk menjatuhkan kunci asing dan jenis kendala lainnya.
Blog
sumber
Ketika kami mencoba untuk menjatuhkan kolom yang diandalkan maka kita melihat kesalahan semacam ini:
jatuhkan batasan yang bergantung pada kolom itu dengan:
Contoh:
Jatuhkan Kendala (DF__Employees__Colf__1273C1CD):
Maka Anda dapat Drop Kolom:
sumber
Solusi:
buka tabel database -> rentangkan tabel -> rentangkan kendala dan lihat ini
sumber
Saya mengalami kesalahan ini ketika mencoba menjalankan migrasi untuk mengatasinya. Saya mengganti nama kolom dan membuat ulang migrasi menggunakan
di konsol manajer paket. Saya kemudian bisa berlari
berhasil.
sumber