Kod Rangka Kerja Fizikal lebih disukai: mengendalikan kekunci luar pelbagai dari jadual yang sama
Dalam Kod Rangka Kerja Fizikal Pertama, anda mungkin menghadapi hubungan yang perlu ditubuhkan di antara dua entiti ini. Ini amat mencabar untuk pemula.
Memandangkan model yang melibatkan pasukan dan permainan, masing -masing mempunyai pasukan rumah dan pasukan tetamu. Walau bagaimanapun, cuba menggunakan kekunci luaran tradisional untuk membuat model ini boleh menyebabkan kesilapan rujukan kitaran.
memahami masalah
Seperti yang ditunjukkan dalam serpihan kod asal, apabila kunci luar ditakrifkan dalam entiti perlawanan, anda sebenarnya membuat sepasang pelbagai hubungan untuk atribut hometeam dan tamu antara perlawanan dan pasukan. Walau bagaimanapun, tetapan ini akan menyebabkan rujukan pekeliling, kerana pasukan juga rujukan sepadan melalui kunci luaran. Kitaran ini melanggar kekangan pangkalan data.
Penyelesaian: Gunakan atribut navigasi Tetapkan dan ModelBuilder Fluent APIUntuk menyelesaikan masalah ini, anda boleh menggunakan model yang lebih baik yang menggunakan koleksi atribut navigasi dan menggunakan ModelBuilder Fluent API dengan kerangka fizikal. Ini adalah contoh:
Dalam kelas pasukan, tentukan dua atribut navigasi koleksi berasingan:
Dalam kelas perlawanan, padamkan atribut asing:
Di kelas DBContext, tulis semula kaedah onmodelcreating dan gunakan hubungan konfigurasi API yang fasih:
<code>public virtual ICollection<Match> HomeMatches { get; set; } public virtual ICollection<Match> AwayMatches { get; set; }</code>
Dalam model yang dikemas kini ini, entiti perlawanan mempunyai dua atribut utama luaran, tetapi tidak ada atribut navigasi. Sebaliknya, atribut navigasi ditakrifkan pada entiti pasukan dan membolehkan melintasi pasukan untuk dipadankan. Proses penciptaan model menggunakan API yang fasih untuk menyatakan secara jelas hubungan untuk mencegah rujukan peredaran. Di samping itu, atribut Willcascadeondelete ditetapkan kepada palsu untuk mencegah penghapusan kelas, yang tidak disyorkan dalam adegan ini.
<code>public int HomeTeamId { get; set; } public int GuestTeamId { get; set; }</code>
Atas ialah kandungan terperinci Bagaimana untuk mengendalikan pelbagai kunci asing dari jadual yang sama dalam kod kerangka entiti terlebih dahulu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!