Cadrul entității 6, relația multi-la-multe dintre mese

Cadrul de entități sprijină implementarea relațiilor multe-la-multe dintre tabelele din baza de date. Această relație în bazele de date relaționale este furnizată prin utilizarea unui tabel intermediar, cu care alte două tabele sunt legate printr-o relație unu-la-multe. Ca rezultat, între aceste două tabele se formează o relație multi-la-multe. De fapt, nu există o tabelă principală și dependentă în această privință, așa cum am descris-o pentru relațiile one-to-one și one-to-many, tabela intermediară depinde de cele două tabele principale.

Să continuăm examinarea exemplului modelului nostru, în care am definit tabelul cumpărătorului și ordinele acestuia. În tabelul Comenzi am utilizat câmpuri care descriu numele produsului și costul acestuia. Evident, utilizarea unei astfel de structuri de baze de date este ineficientă. O abordare mai corectă este crearea unui tabel de produse care conține o colecție de produse pentru magazin, iar între tabelele Produs și client trebuie să creați o relație multiplă cu ajutorul unui tabel intermediar de comenzi. Adică, în contextul exemplului nostru, o relație de la mulți către mulți indică faptul că un cumpărător poate comanda mai multe produse, iar un singur produs poate fi comandat de mai mulți cumpărători.

Să implementăm acest model în Code-First. Următoarele arată structura modelului, în care cadrul de entitate recunoaște în mod automat relația multi-la-mulți între două tabele clienți și produse (în articolul precedent, precum și clasa de comandă, am eliminat Profil clasa de utilizare, care a fost utilizat în discuția unui unu-la-unu):

Dacă executați aplicația, Entity Framework va recrea automat baza de date, deoarece modelul sa schimbat. Codul-Primul poate recunoaște relația dintre aceste clase ca multi-la-multe și să creeze un tabel intermediar care conține chei străine care fac referire la tabelele Clienți și Produse, după cum se arată în figura de mai jos:

Cadrul entității 6, relația multi-la-multe dintre mese

Este de remarcat faptul că aceste chei străine sunt, de asemenea, cheile primare ale mesei intermediare. Numele tabelului de etapizare constă în numele a două tabele legate, în exemplul nostru se numește ProductCustomers. Numele cheilor externe generate urmează aceleași convenții pe care le-am descris mai devreme. După definirea unei relații mai multor entități, Entity Framework știe ce instrucțiuni SQL ar trebui utilizate pentru a insera, șterge și actualiza datele în tabelele conectate.

Comunicațiile de la mulți la mulți pot fi de asemenea configurate utilizând API-ul Fluent. Acest lucru poate fi necesar atunci când utilizați mai multe legături între tabele pentru a specifica în mod explicit o pereche de proprietăți de navigare care susțin implementarea acestei relații. Următorul exemplu este un exemplu al acestei setări:

Rețineți că aici vom specifica în mod explicit numele tabelului de așteptare atunci când apelați o hartă metoda de ajutor (), care rezultă în Cadrul Entitate creează un exemplu de pornire, tabelul Comenzi cu numele, mai degrabă decât ProductCustomers.

De asemenea, specifică în mod explicit numele cheilor străine folosind MapLeftKey () și MapRightKey () configurație de obiect ManyToManyAssociationMappingConfiguration, care este trecut la hartă () în parametrul de acțiune delegat. Aceste metode specifică tastele stânga și dreapta pentru tabela intermediară. Pentru a evita orice confuzie, trebuie să vă amintiți o regulă simplă, punctele cheie lăsate la esența clasei pentru care am numit HasMany () metoda înainte, și punctele cheie direct la esența clasei pentru care am numit withmany) metoda (. Dacă le obține greșit drumul va întâmpla nimic rău, doar tasta CUSTOMERID externă se va referi la masa produsului și cheia ProductID exterior la masa clientului.

Articole similare