Vă mulțumim pentru susținere

Sunt mai multe clase de dateContext?

Pentru a utiliza în întregime LinqToSql într-o aplicație ASP.net 3.5, este necesar să creați DataContext designer în VS 2008). Din perspectiva UI, DataContext este un design al secțiunilor bazei de date pe care doriți să le expuneți prin LinqToSql și este un element integru în configurarea funcțiilor ORM ale LinqToSql.

Întrebarea mea este: Înființez un proiect care folosește o bază de date vastă în care toate mesele sunt interconectate într-un fel prin chei externe. Prima mea înclinație este de a face o clasă imensă de dateContext care modelează întreaga bază de date. În acest fel aș putea în teorie (deși nu știu dacă acest lucru ar fi necesar în practică) să utilizeze conexiunile Cheii Externe generate de LinqToSql pentru a merge ușor între obiectele conexe din codul meu, inserați obiecte asemănătoare etc.

Cu toate acestea, după ce i-am dat niște gânduri, mă gândesc acum că ar putea fi mai logic să creez mai multe clase DataContext, fiecare dintre ele referindu-se la un anumit spațiu de nume sau o secțiune logică interconectată în baza mea de date. Principala mea preocupare constă în faptul că instanțierea și eliminarea unei clase imense DataContext tot timpul pentru operații individuale care se referă la anumite domenii ale bazei de date ar impune o impunere inutilă asupra resurselor aplicației. În plus, este mai ușor să creați și să gestionați fișiere mai mici de date decât unul mai mare. Lucrul pe care l-aș pierde este că ar exista unele secțiuni îndepărtate ale bazei de date care nu ar fi navigabile prin LinqToSql (chiar dacă un lanț de relații le conectează la baza de date actuală). În plus, ar exista unele clase de tabele care ar exista în mai mult de un DataContext.

Orice gânduri sau experiență cu privire la faptul că mai multe dateContexturi (care corespund DB-urilor) sunt potrivite în locul (sau în plus față de) unei clase de DateContext foarte mari (corespunzătoare întregului DB)?

0
adăugat editat

5 răspunsuri

M-am luptat cu aceeași întrebare în timp ce am instalat LINQ retro la SQL peste un DB vechi. Baza noastră de date este un pic cam ciudat (150 de tabele) și, după câteva gânduri și experimentări, am ales să folosesc mai multe dateContext. Indiferent dacă acest lucru este considerat un anti-model, rămâne de văzut, dar deocamdată face viața viabilă.

0
adăugat

Trebuie să nu fiu de acord cu răspunsul acceptat. În întrebarea adresată, sistemul are o singură bază de date mare, cu puternice relații cheie străine între aproape fiecare tabel (și cazul în care lucrez). În acest scenariu, ruperea acestuia în mai multe DateContext (DC) are două dezavantaje imediate și majore (ambele menționate de întrebare):

  1. You lose relationships between some tables. You can try to choose your DC boundaries wisely, but you will eventually run into a situation where it would be very convenient to use a relationship from a table in one DC to a table in another, and you won't be able to.
  2. Some tables may appear in multiple DC's. This means that if you want to add table-specific helper methods, business logic, or other code in partial classes, the types won't be compatible across DC's. You can work around this by inheriting each entity class from its own specific base class, which gets messy. Also, schema changes will have to be duplicated across multiple DC's.

Acum acestea sunt dezavantaje semnificative. Există avantaje destul de mari pentru a le depăși? Întrebarea menționează performanța:

Principala mea preocupare este aceea de a instantiza si de a distruge una imensa   Clasa DataContext continuu pentru operațiunile individuale care se leagă   la anumite domenii ale bazei de date ar fi impusă o inutilitate   impunerea asupra resurselor de aplicație.

De fapt, nu este adevărat că un DC mare necesită mult mai mult timp pentru a instanțiza sau a folosi într-o unitate tipică de lucru. De fapt,

0
adăugat

Cred că John este corect.

"Principala mea preocupare este ca instantierea si eliminarea unei clase imense DataContext tot timpul pentru operatiuni individuale care se refera la anumite domenii ale bazei de date ar impune o impunere inutila asupra resurselor aplicatiei"

Cum susțineți acea declarație? Care este experimentul dvs. care arată că un DataContext de dimensiuni mari este un obstacol în calea performanței? Având mai multe dateacontext-uri este foarte mult ca având mai multe baze de date și are sens în scenarii similare, adică, aproape niciodată. Dacă lucrați cu mai multe texturi de date, trebuie să țineți evidența obiectelor care aparțin acelui datacontext și nu puteți să le raportați obiecte care nu se află în același context de date. Acesta este un miros costisitor de proiectare pentru nici un beneficiu real.

@Evan "DataContext (sau Linq pentru entități ObjectContext) este mai mult o" unitate de lucru "decât o conexiune" Tocmai de aceea nu ar trebui să aveți mai mult de un datacontext. De ce doriți mai mult decât o singură "unitate de lucru" la un moment dat?

0
adăugat
Da, OP nu este corect presupunând că un DC mare necesită mai mult timp pentru a instanțiate. De fapt, după ce prima instanță este creată într-un proces care rulează, instanțele următoare ale aceluiași DC pot fi create aproape instantaneu.
adăugat autor Jordan Rieger

Nu sunt de acord cu răspunsul lui Ioan. DataContext (sau Linq to Entities ObjectContext) este mai mult o "unitate de lucru" decât o conexiune. Administrează urmărirea schimbării, etc. Vezi postarea pe blog pentru o descriere:

Durată de viață unui LINQ la SQL DataContext

Cele patru puncte principale ale acestui post pe blog sunt: ​​DataContext:

  1. Se potrivește ideal pentru o abordare "unitate de lucru"
  2. De asemenea, este proiectat pentru funcționarea serverului "apatrid"
  3. Nu este proiectat pentru     Utilizare cu durată lungă de viață
  4.   Ar trebui folosit foarte atent după
    orice operație SumbitChanges ().
     

Având în vedere că nu cred că folosirea mai multor DateContext ar face vreun rău - de fapt, crearea de diferite tipuri de date pentru diferite tipuri de lucru ar contribui la îmbunătățirea utilizării și organizării implementării dvs. LinqToSql. Singurul dezavantaj este că nu veți putea folosi sqlmetal pentru a vă genera automat dmbl.

0
adăugat

În experiența mea cu LINQ la SQL și LINQ către entități, un DataContext este sinonim cu o conexiune la baza de date. Deci, dacă ați utiliza mai multe magazine de date, va trebui să utilizați mai multe dateContext. Reacția mea intestinală este că nu veți observa o încetinire cu un DataContext care să cuprindă un număr mare de mese. Dacă ați făcut totuși, ați putea împărți întotdeauna baza de date logic în punctele în care puteți izola tabele care nu au nicio legătură cu alte seturi de tabele și pentru a crea mai multe contexte.

0
adăugat