Arhiva de etichete: entity framework

O problemă de simultaneitate, Entity Framework și SQL Server

Am avut de curând acel soi de situație neplăcută, știți voi cei din branșă, din acelea ce n-au cum să se-ntâmple; cu alte cuvinte, din acelea ce-au foarte mari șanse de-a se manifesta supărător de intens și frecvent și cu umflături. La origine o problemă de acces simultan la date, unul din motivele pentru care n-ar fi trebuit să apară este simplul fapt că nu există niciun scenariu util, oficial document ori măcar suportat.

Uite mă, Costele, de-aia te-ncurci

Uite mă, Costele, de-aia te-ncurci

Cu totate acestea, operatorii au făcut-o, fiind, drept consecință, necesară o intervenție spre corectare, aplanare și reinstaurea voioșiei și, desigur, o modalitate de-a preveni disfuncționalități ulterioare.

În sine, au existat două cazuri distincte ale problemei date, ambele corespunzătoare aceluiași aspect funcțional (practic insesizabile de către un utilizator):

A) când se actualiza un set de date, respectiv
B) când se crea unul nou.

Citește mai departe

Știu ce este, dar ce reprezintă?

Mai întâi, desigur, trebuie să stabilim coordonatele discuției. Este vorba despre situația în care lucrăm (fie pentru că am ales ca atare, fie că nu avem de-ales) la un proiect unde accesul la date este abstractizat:

– printr-un model de date implementat printr-un set de clase (entități);
– folosind un ORM oarecare pentru gestionarea corespondenței dintre entități și diversele artefacte din baza de date (tabele, dar nu numai);
– folosind repository-uri pentru a accesa entitățile respective;
– în sfârșit, ca să adăugăm o dimensiune concretă, folosind C# ca limbaj de bază și Entity Framework drept ORM.

Care-cum?

Care-cum?

Folosind Entity Framework, se pune problema gestionării DbContext-ului, adică a modului în care trebuie distribuit între diversele repository-uri implicate într-o singură tranzacție. Dintre toate variantele, m-am oprit în cele din urmă pe cele descrise aici (și vă recomand să citiți înainte de a continua).

Citește mai departe

Kobyashi Maru

Am încheiat recent un proiect având interacțiunea cu o bază de date SQL Server prin Entity Framework (EF) 6.3, elemente care nu puteau fi supuse modificării. Nu că ar fi ceva rău, nu că as avea ceva de obiectat, dar este important de menționat pentru restul povestirii.

Ilustrație - DALL-E2

Ilustrație – DALL-E2

Pe lângă legătura standard dintre entități și tabele (sau view-uri) din baza de date, am fost nevoit să folosesc și interogări construite, folosind, Database.SqlQuery<TSmuff>(), pe baza unor funcții SQL ce returnează date tabelare, dar cu parametri ceva mai… deosebiți – TVP, adică Table Valued Parameters.

Acest fapt necesită crearea explicită a unor instanțe de DbParameter; nu pot fi transmise pur și simplu valorile, fapt ce-ar lăsa-n sarcina EF crearea instanțelor de DbParameter atunci când este momentul. Și, ca o restricție suplimentară: Database.SqlQuery<>() acceptă drept argumente ori doar valori, ori doar instanțe de DbParameter; nu poți să le combini.

Citește mai departe