• 23/10/2016
  • 6 minute de citit

In acest articol

Code First va permite sa descrieti un model utilizand clase C # sau Visual Basic .NET. Forma de baza a modelului este detectata prin utilizarea conventiilor. Conventiile sunt seturi de reguli care sunt utilizate pentru a configura automat un model conceptual bazat pe definitiile clasei atunci cand se lucreaza cu Code First. Conventiile sunt definite in spatiul de nume System.Data.Entity.ModelConfiguration.Conventions.

Puteti configura in continuare modelul dvs. utilizand adnotari de date sau API-ul fluent. Se acorda prioritate configurarii prin API-ul fluent urmat de adnotari de date si apoi de conventii. Pentru mai multe informatii, consultati Adnotari de date, API fluent – Relatii, API fluent – Tipuri si proprietati si API fluent cu VB.NET.

O lista detaliata a conventiilor Code First este disponibila in Documentatia API. Acest subiect ofera o prezentare generala a conventiilor utilizate de Code First.

Tastati Discovery

Cand utilizati dezvoltarea Code First, incepeti de obicei prin scrierea de clase .NET Framework care va definesc modelul conceptual (domeniu). Pe langa definirea claselor, trebuie sa anuntati DbContext ce tipuri doriti sa includeti in model. Pentru a face acest lucru, definiti o clasa de context care deriva din DbContext si expune proprietatile DbSet pentru tipurile pe care doriti sa le faceti parte din model. Code First va include aceste tipuri si, de asemenea, va extrage orice tipuri de referinta, chiar daca tipurile de referinta sunt definite intr-un alt ansamblu.

Daca tipurile dvs. participa la o ierarhie de mostenire, este suficient sa definiti o proprietate DbSet pentru clasa de baza, iar tipurile derivate vor fi incluse automat, daca se afla in acelasi ansamblu cu clasa de baza.

In exemplul urmator, exista o singura proprietate DbSet definita in clasa SchoolEntities ( Departamente ). Code foloseste mai intai aceasta proprietate pentru a descoperi si extrage orice tipuri de referinta.

public class SchoolEntities: DbContext {public DbSet <Department> Departments {get; a stabilit; }} public class Department {// Key public public int DepartmentID {get; a stabilit; } public string Nume {get; a stabilit; } // Navigare proprietate publica virtuala ICollection <Curs> Cursuri {get; a stabilit; }} public class Course {// Cheie primara public int CourseID {get; a stabilit; } sir public Titlu {get; a stabilit; } public int Credite {get; a stabilit; } // Cheie straina publica ID departament {get; a stabilit; } // Navigare proprietati publice virtuale Departament Departament {get; a stabilit; }} public partial class OnlineCourse: Curs {public string URL {get; a stabilit; }} public partial class OnsiteCourse: Curs {public string Location {get; a stabilit; } sir public Zile {get; a stabilit; } public System.DateTime Time {get; a stabilit; }}

Daca doriti sa excludeti un tip din model, utilizati atributul NotMapped sau DbModelBuilder.Ignore API fluent.

videos pornos de abuelas videos putas maduras
sex porne coños de viejas
porno casero en españa porno madres peludas
sexo casero españa porno traducido español
pornotrans como folla mi mujer
incesto ruso hentaihd
maduras españolas camara oculta madura cabalgando
españolas amater paja en el coche
incesto lesbianas videosgays
videos porno gay de españoles caras llenas de semen
videos chicas gratis folladas extremas
cerdas com gratis porno casero real español
mamada de rodillas orgia bisexual
video sexo gratis tetudas españolas
porno andaluz porno torrent magnet
mi primera follada videos de chicas gratis
abuelas españolas xxx parejas pilladas en la calle
miakalifa maduras por dinero
cartoon xxx www rubias
como folla mi mujer tetudas jovenes

modelBuilder.Ignore <Department> ();

Conventia cheie primara

Codul deduce mai intai ca o proprietate este o cheie primara daca o proprietate dintr-o clasa este numita „ID” (nu este sensibila la majuscule), sau numele clasei urmat de „ID”. Daca tipul proprietatii cheii primare este numeric sau GUID, acesta va fi configurat ca o coloana de identitate.

public class Department {// Key public public int DepartmentID {get; a stabilit; }. . . }

Conventia de relatie

In Entity Framework, proprietatile de navigare ofera o modalitate de a naviga intr-o relatie intre doua tipuri de entitati. Fiecare obiect poate avea o proprietate de navigare pentru fiecare relatie la care participa. Proprietatile de navigare va permit sa navigati si sa gestionati relatiile in ambele directii, returnand fie un obiect de referinta (daca multiplicitatea este fie una, fie zero sau una), fie o colectie (daca multiplicitatea este mai mare). Code First deduce relatii bazate pe proprietatile de navigare definite pe tipurile dvs.

In plus fata de proprietatile de navigare, va recomandam sa includeti proprietati de cheie straina pe tipurile care reprezinta obiecte dependente. Orice proprietate cu acelasi tip de date ca proprietatea cheii principale principale si cu un nume care urmeaza unul dintre urmatoarele formate reprezinta o cheie straina pentru relatie: „<numele proprietatii de navigare> <numele proprietatii cheii principale principale>”, „<principal numele clasei> <numele proprietatii cheii principale> “, sau” <numele proprietatii cheii principale principale> “. Daca se gasesc mai multe potriviri, atunci se acorda prioritate in ordinea enumerata mai sus. Detectarea cheii straine nu este sensibila la majuscule si minuscule. Cand este detectata o proprietate de cheie straina, Code First deduce multiplicitatea relatiei pe baza nulitatii cheii externe. Daca proprietatea este anulabila, atunci relatia este inregistrata ca optionala; in caz contrar, relatia este inregistrata dupa cum este necesar.

Daca o cheie straina a entitatii dependente nu este nula, atunci Code First seteaza stergerea in cascada a relatiei. Daca o cheie straina a entitatii dependente este nula, Code First nu seteaza stergerea in cascada a relatiei si, atunci cand principalul este sters, cheia externa va fi setata la nula. Comportamentul de stergere in multiplicitate si in cascada detectat prin conventie poate fi anulat prin utilizarea API-ului fluent.

In exemplul urmator, proprietatile de navigare si o cheie straina sunt utilizate pentru a defini relatia dintre clasele Departament si curs.

public class Department {// Key public public int DepartmentID {get; a stabilit; } public string Nume {get; a stabilit; } // Navigare proprietate publica virtuala ICollection <Curs> Cursuri {get; a stabilit; }} public class Course {// Cheie primara public int CourseID {get; a stabilit; } sir public Titlu {get; a stabilit; } public int Credite {get; a stabilit; } // Cheie straina publica ID departament {get; a stabilit; } // Navigare proprietati publice virtuale Departament Departament {get; a stabilit; }}

Nota

Daca aveti mai multe relatii intre aceleasi tipuri (de exemplu, sa presupunem ca definiti Persoana si carte clase, in cazul in care persoana clasa contine ReviewedBooks si AuthoredBooks proprietatile de navigare si de carte clasa contine autor si Examinatorilor proprietatile de navigare) , trebuie sa configurati manual relatiile utilizand Adnotari de date sau API-ul fluent. Pentru mai multe informatii, consultati Adnotari de date – Relatii si API fluent – Relatii.

Conventia privind tipurile complexe

Cand Code First descopera o definitie a clasei in care o cheie primara nu poate fi dedusa si nici o cheie primara nu este inregistrata prin adnotari de date sau API-ul fluent, atunci tipul este inregistrat automat ca tip complex. Detectarea complexa a tipului necesita, de asemenea, ca tipul sa nu aiba proprietati care sa faca referinta la tipurile de entitati si sa nu fie mentionate dintr-o proprietate de colectie de pe alt tip. Avand in vedere urmatoarele definitii ale clasei, Code First ar deduce ca Details este un tip complex, deoarece nu are o cheie primara.

public partial class OnsiteCourse: Course {public OnsiteCourse () {Details = new Details (); } public Detalii Detalii {get; a stabilit; }} public class Detalii {public System.DateTime Time {get; a stabilit; } sir public Location {get; a stabilit; } sir public Zile {get; a stabilit; }}

Conventia de sir de conexiune

Pentru a afla despre conventiile pe care le utilizeaza DbContext pentru a descoperi conexiunea de utilizat, consultati Conexiuni si modele.

Eliminarea conventiilor

Puteti elimina oricare dintre conventiile definite in spatiul de nume System.Data.Entity.ModelConfiguration.Conventions. Urmatorul exemplu elimina PluralizingTableNameConvention .

clasa publica SchoolEntities: DbContext {. . . protected override void OnModelCreating (DbModelBuilder modelBuilder) {// Configurati codul mai intai pentru a ignora conventia PluralizingTableName // Daca pastrati aceasta conventie, tabelele generate // vor avea nume pluralizate. modelBuilder.Conventions.Remove <PluralizingTableNameConvention> (); }}

Conventii personalizate

Conventiile personalizate sunt acceptate in EF6 in continuare. Pentru mai multe informatii, consultati primele conventii privind codul personalizat.