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:
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();
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();
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!