Saya mendapatkan kesalahan ini saat menulis ke database:
Properti dependen dalam ReferentialConstraint dipetakan ke kolom yang dibuat di toko. Kolom: 'PaymentId'.
public bool PayForItem(int terminalId, double paymentAmount,
eNums.MasterCategoryEnum mastercategoryEnum, int CategoryId, int CategoryItemId)
{
using (var dbEntities = new DatabaseAccess.Schema.EntityModel())
{
int pinnumber = 0;
long pinid = 1; //getPinId(terminalId,ref pinnumber) ;
var payment = new DatabaseAccess.Schema.Payment();
payment.CategoryId = CategoryId;
payment.ItemCategoryId = CategoryItemId;
payment.PaymentAmount = (decimal)paymentAmount;
payment.TerminalId = terminalId;
payment.PinId = pinid;
payment.HSBCResponseCode = "";
payment.DateActivated = DateTime.Now;
payment.PaymentString = "Payment";
payment.PromotionalOfferId = 1;
payment.PaymentStatusId = (int)eNums.PaymentStatus.Paid;
//payment.PaymentId = 1;
dbEntities.AddToPayments(payment);
dbEntities.SaveChanges();
}
return true;
}
Skemanya adalah:
c#
sql-server-2008
linq-to-sql
entity-framework-4
Raja Welsh
sumber
sumber
(e as System.Data.Entity.Infrastructure.DbUpdateException).Entries
), Anda dapat melihat tabel mana yang berisi kunci utama yang direferensikan.Kesalahan ini mengatakan bahwa Anda menggunakan hubungan yang tidak didukung atau Anda memiliki kesalahan dalam pemetaan Anda. Kode Anda kemungkinan besar sama sekali tidak terkait dengan kesalahan tersebut.
Kesalahan berarti Anda memiliki beberapa hubungan antara entitas di mana properti kunci asing di entitas dependen didefinisikan sebagai penyimpanan yang dihasilkan. Properti yang dihasilkan toko diisi dalam database. EF tidak mendukung properti yang dihasilkan toko sebagai kunci asing (serta properti yang dihitung dalam kunci utama).
sumber
PaymentID
dan tangani.Saya memiliki masalah yang sama. Berdasarkan jawaban yang diberikan di sini saya dapat melacak dan menyelesaikannya, tetapi saya memiliki masalah aneh yang dijelaskan di bawah - ini mungkin membantu seseorang di masa depan.
Pada tabel dependen saya, kolom kunci asing telah diatur ke StoreGeneratedPattern = "Identity". Saya harus mengubahnya menjadi "Tidak Ada". Sayangnya, melakukannya di dalam desainer tidak berhasil sama sekali.
Saya melihat di XML yang dihasilkan desainer (SSDL) dan properti ini masih ada di sana, jadi saya menghapusnya secara manual. Saya juga harus memperbaiki kolom pada database (menghapus Identity (1,1) dari CREATE TABLE SQL)
Setelah itu, masalahnya hilang.
sumber
Saya memiliki masalah yang sama dan setelah menggali beberapa desain tabel di sql server, saya menemukan bahwa saya secara keliru menetapkan kunci utama tabel juga sebagai kunci asing.
Dalam gambar ini, Anda dapat melihat bahwa JobID adalah kunci utama tabel tetapi juga kunci asing yang salah.
sumber
Masalah saya disebabkan oleh pendefinisian yang berlebihan dari kunci utama dalam konfigurasi.
Hapus baris ini
Contoh http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx
Ini cukup untuk mendefinisikan hubungan
sumber
Periksa kembali hubungan antara Pembayaran dan tabel / entitas lain. Menyertakan salah satu yang tidak boleh berisi PaymentId karena di situlah kemungkinan besar masalahnya bersembunyi.
Saat membuat kunci asing di SQL Server Management Studio, kunci utama adalah default, dan default ini dikembalikan saat tabel induk diubah, jadi berhati-hatilah untuk mengubah nilai dalam urutan yang benar di jendela "Tabel dan Kolom".
Selain itu, setelah Anda memperbaiki hubungan yang bermasalah, ada kemungkinan besar bahwa "Segarkan" sederhana pada model tidak akan benar menghapus hubungan yang salah dari model dan Anda akan mendapatkan kesalahan yang sama bahkan setelah " perbaiki ", jadi lakukan ini sendiri dalam model sebelum melakukan penyegaran. (Saya menemukan ini dengan cara yang sulit.)
sumber
Jika Anda telah memeriksa hubungan Anda dan baik di sana.
Hapus tabel di edmx dan kemudian perbarui dari database. Ini akan membantu Anda melakukan pembaruan secara manual.
sumber
Bagi saya itu adalah kunci asing yang salah ditempatkan di tabel tetapi bahkan setelah mengubah tabel untuk memperbaikinya, itu masih tidak berfungsi. Anda perlu memperbarui file EDMX (dan tidak cukup untuk "menyegarkan" tabel dari model, Anda perlu menghapus dan menambahkan tabel lagi dalam model).
sumber
Selain jawaban yang diterima, jika Anda menggunakan generator EF Reverse POCO atau alat lain yang menghasilkan POCO, pastikan Anda memperbaruinya !
sumber
Dalam kasus saya, masalahnya disebabkan oleh hubungan dua arah 1-1:
Saya harus menghapus salah satu dari dua kunci asing (toh tidak perlu).
sumber
Dalam kasus saya, hanya saja saya tidak memiliki izin yang ditetapkan dengan benar pada database. Saya telah membaca set saja dan kerangka kerja entitas memberi saya kesalahan ReferentialConstraint yang membuat saya bingung. Menambahkan izin menulis tambahan dan semuanya baik-baik saja.
sumber
Dalam kasus saya, saya memiliki properti Database Generated, dan properti navigasi ForeignKey yang disiapkan untuk mereferensikan tabel terkait 1 hingga 1.
Ini bukan sesuatu yang bisa saya hapus, saya harus bisa mengatur kunci utama entitas menjadi Database Generated DAN saya harus bisa mereferensikan tabel 1 ke 1 sebagai properti navigasi.
Tidak yakin apakah ini sama untuk orang lain, tetapi masalah ini hanya muncul saat membuat entitas baru, membaca atau mengedit entitas yang ada tidak menunjukkan masalah, jadi saya mengatasi masalah dengan membuat versi yang diwariskan dari Konteks saya dan menggunakan metode Fluent untuk menonaktifkan properti navigasi saat membuat.
Jadi, entitas asli saya terlihat seperti ini:
Jadi saya membuat konteks warisan khusus yang terlihat seperti ini:
dan kemudian mengubah kode yang membuat entitas baru untuk membuat pengguna tipe konteks baru
Semoga ini bisa membantu seseorang
sumber
Dalam kasus saya, bidang Id yang FK hanya dalam Entity Framework propierty "StoreGeneratedPattern" ditetapkan "Itentity" bukan "None"
sumber