Rumah > pangkalan data > tutorial mysql > Mengapa Rangka Kerja Entiti Melemparkan Ralat 'Tidak boleh memasukkan nilai eksplisit untuk lajur identiti...', dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Rangka Kerja Entiti Melemparkan Ralat 'Tidak boleh memasukkan nilai eksplisit untuk lajur identiti...', dan Bagaimana Saya Boleh Membetulkannya?

Mary-Kate Olsen
Lepaskan: 2025-01-05 09:45:39
asal
834 orang telah melayarinya

Why Does Entity Framework Throw an

Ralat Rangka Kerja Entiti: Lajur Identiti dan Sisipan Nilai Eksplisit

Satu isu biasa yang dihadapi dalam Rangka Kerja Entiti (EF) ialah ketidakupayaan untuk memasukkan eksplisit nilai untuk lajur identiti dengan mesej ralat: "Tidak boleh memasukkan nilai eksplisit untuk lajur identiti dalam jadual..." apabila IDENTITY_INSERT ditetapkan kepada MATI dalam pangkalan data. Isu ini timbul apabila EF cuba memasukkan nilai secara manual ke dalam lajur yang ditetapkan sebagai lajur identiti, yang secara automatik menambah nilainya berdasarkan tetapan pangkalan data.

Punca Punca

Punca ralat ini ialah pangkalan data bertanggungjawab untuk memberikan nilai unik kepada lajur identiti. Apabila harta StoreGeneratedPattern bagi harta entiti ditetapkan kepada Identiti, EF menganggap bahawa pangkalan data akan mengendalikan penetapan nilai. Walau bagaimanapun, jika kod secara eksplisit memberikan nilai kepada lajur ID, konflik berlaku antara sisipan manual dan logik penjanaan nilai automatik pangkalan data, mengakibatkan ralat.

Penyelesaian

Untuk menyelesaikan isu ini, adalah perlu untuk memastikan bahawa EF tidak cuba memberikan nilai secara eksplisit kepada lajur identiti. Ini boleh dicapai dengan:

  • Mengemas kini Fail EDMX: Kemas kini fail Model Data Entiti (EDMX) untuk menggambarkan konfigurasi pangkalan data. Sahkan bahawa atribut IsDbGenerated untuk lajur identiti dalam fail pereka EF ditetapkan kepada Benar. Jika ia tidak ditetapkan, tambahkannya secara manual.
  • Mengalih keluar Tugasan Nilai Eksplisit: Alih keluar sebarang kod penetapan nilai eksplisit daripada sifat entiti. EF akan mengendalikan penjanaan nilai untuk lajur identiti secara automatik berdasarkan tetapan pangkalan data.

Contoh

Dalam contoh kod yang disediakan, isu ini mungkin disebabkan oleh penetapan nilai yang jelas kepada sifat Id entiti Ahli Kumpulan:

groupMember.Id = _groupContext.GroupMembers.Count();
Salin selepas log masuk

Untuk membetulkannya, alih keluar penetapan nilai eksplisit dan membenarkan EF mengendalikan penjanaan nilai:

GroupMember groupMember = new GroupMember();
groupMember.GroupId = group.Id;
groupMember.UserId = (new UserId(group.Owner));
group.GroupMembers.Add(groupMember);

_groupContext.SaveChanges();
Salin selepas log masuk

Kesimpulan

Dengan mematuhi garis panduan ini, pembangun boleh mengelakkan "Tidak boleh memasukkan nilai eksplisit untuk lajur identiti..." ralat dalam Rangka Kerja Entiti, memastikan lajur identiti diurus dengan betul oleh penjanaan nilai automatik pangkalan data logik.

Atas ialah kandungan terperinci Mengapa Rangka Kerja Entiti Melemparkan Ralat 'Tidak boleh memasukkan nilai eksplisit untuk lajur identiti...', dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan