Arhiva de etichete: sql server

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

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