Soluția .NET pentru baza de date frecvent modificată

În prezent, lucrez la un mic aplicație CRUD. Baza de date este o mare dezordine și se va schimba frecvent pe parcursul următoarelor 6 luni până la un an. Ce ați recomanda pentru stratul meu de date:

1) ORM (dacă da, care dintre ele?)

2) Linq2Sql

3) Proceduri stocate

4) Întrebări parametrizate

Chiar am nevoie de o soluție care să fie suficient de dinamică (atât rapidă cât și ușoară), unde pot înlocui tabelele și pot adăuga/șterge coloane frecvent.

Notă: Nu am prea multă experiență cu ORM (doar un mic SubSonic) și, în general, tinde să folosească proceduri stocate, așa că poate că ar fi așa. Mi-ar plăcea să învăț Ling2Sql sau NHibernate dacă oricare ar permite situația pe care am descris-o mai sus.

0
fr hi bn

11 răspunsuri

NHibernate, but only if you would be amenable to having an object-first approach wherein you define your classes, and then define your desired table structure in the mapping files, and then create a database schema using NHibernate's built in schema generation classes.

Pentru a face acest lucru invers (de exemplu, aveți o grămadă de mese și apoi vă bazați pe design-ul obiectului pe care le-am găsit) MyGeneration + NHibernate la locul de muncă, deși nu sunt prea fericit cu clasele rezultate (în principal pentru că eu sunt un astfel de stickler pentru programare orientată pe obiecte).

0
adăugat

Dacă schema bazei de date se schimbă adesea, preferați cadrul entităților prin LINQ2SQL. Dacă schimba schema, folosind L2S trebuie să faceți clic pe 1) Scoateți și re-adăugați tabelul (pierderea personalizărilor)
2) Modificați modelul manual (așa cum ați făcut aici în stackoverflow)

EF este un super-set de L2S, oferindu-vă mai multă flexibilitate de utilizare și independență dbms

0
adăugat

Un lucru esențial pentru a fi conștient de aici este că, dacă schema de baze de date se schimbă frecvent, doriți să aveți un anumit nivel de siguranță de tip timp de compilare. Am constatat că aceasta este o problemă cu NHibernate deoarece folosește fișiere xml de mapare, deci dacă schimbați ceva în schema bazei de date, nu știți până la runtime că maparea este întreruptă.

Aceasta va fi, de asemenea, o problemă cu procs stocate.

Folosind Linq2Sql vă va oferi avantajul de a ști exact unde vă rupe codul când schimbați o schemă la momentul compilării. Acest lucru pentru mine, este ceva care ar avea prioritate față de orice altceva dacă lucrez cu o schemă care se schimbă frecvent

0
adăugat
Am găsit un pic greu de cod refactor dacă utilizați abordarea "drag and drop" a designerului linq2sql. Cu toate acestea, cu Fluent NHibernate, acest lucru ar putea fi destul de ușor de rezolvat.
adăugat autor hangy, sursa
folosind linq2sql va pune un blestem asupra copiilor dvs. toată familia ta va muri o moarte oribilă, creată de designer.
adăugat autor Andrew Bullock, sursa
Fluent NHibernate facilitează scrierea testelor de integrare, care ar trebui să verifice dacă mapările sunt corecte. Puteți utiliza baza de date în memorie pentru ao face rapid.
adăugat autor Marek Blotny, sursa

M-aș uita la SubSonic cu configurarea furnizorului (Website Project). Asta functioneaza excelent pentru ca regenereaza automat obiectele DAL de fiecare data cand construiti proiectul, asa ca daca baza de date se schimba intr-un mod care va sparge codul, obtineti o eroare de construire.

A funcționat bine până când schema bazei de date a devenit foarte complexă și am atins limitele modelului ActiveRecord, dar atâta timp cât schema nu este foarte complexă, funcționează destul de bine. Odată ce schema se stabilizează, puteți comuta astfel încât să construiți numai DAL atunci când doriți.

0
adăugat

Sunteți deja mulțumit de procs stocate și acestea ar putea să fie suficiente pentru a elimina schema de schimbare. Dacă ORM-urile nu sunt mulțumite de procs stocate, atunci ar putea lucra cu Vizualizările pe care le păstrați la curent cu schema de schimbare.

0
adăugat

Dacă aș fi în pantofi, aș încerca să folosesc ceea ce știam (sprocs) cu Linq2Sql. Linq2Sql vă poate folosi în continuare sprock-urile, dar apoi aveți bonusul suplimentar de a pune un nou instrument în centură. Cred ca avand o intelegere asupra Linq2XXX (X fiind o tehnologie aleatoare, nu pentru divertisment pentru adulti .... ceea ce nu este o idee proasta acum cand ma gandesc), sintaxa si metodologia va fi o mare plus fata de talentul setat folosind Linq peste o colecție de obiecte este destul de dulce.

Dar, în cele din urmă, ceva de genul NHibernate te va potrivi mai bine pe termen lung.

0
adăugat

Orice soluție poate funcționa, ceea ce aveți cu adevărat nevoie este un set de teste care vor garanta că operațiunile de bază cum ar fi inserarea, selectarea, actualizarea și ștergerea lucrărilor. În acest fel, puteți pur și simplu să efectuați testele și să verificați dacă mapările sunt actualizate.

0
adăugat

uita-te la ce se schimbă și vezi dacă poți anticipa și generaliza tipurile de schimbări care veneau la tine, astfel încât să nu-ți rupă codul

un cadru poate facilita modificările, însă o analiză mai profundă va avea un beneficiu pe termen lung

0
adăugat

Cu siguranta doriti sa folositi un ORM. ORM este ok, dar vrei ceva care va genera clase puternic tastate. Când câmpurile sunt adăugate, modificate sau șterse dintr-un tabel, doriți să puteți regenera aceste clase și să vă ocupați de fixarea erorilor de timp de compilare numai. Dacă utilizați un model dinamic, este posibil să aveți multe erori greșite în timpul rulării. Este foarte important! Fac parte din echipa de dezvoltare MyGeneration pe sourceforge și cred că aceasta este o soluție excelentă pentru problema dvs. Puteți genera dOOdads, NHibernate, EasyObjects, EntitySpaces, etc. Dacă doriți să mergeți cu o soluție mai scumpă, mergeți cu CodeSmith sau LLBLGen Pro . Mult noroc - oricine este interesat să utilizeze MyGeneration, nu ezitați să mă contactați cu întrebări.

0
adăugat

Utilizați EntitySpaces. mi vei trimite flori, garantate. pur și simplu minunat. schimba db cum dorești. apăsați butonul, bang. toate schimbările se fac. fără a schimba codul personalizat. Imi place.

0
adăugat

Cât de simplu este aplicația? Dacă aș lucra timp de câteva luni cu chestii de schemă/proiectare și nu mă tem de o aplicație reală. . . Aș lua în considerare utilizarea EDM și a unui proiect de aplicație Web pentru entități dinamice de date. Acest lucru vă va face cu cel mai mic efort, în opinia mea. Acest lucru vă păstrează axându-vă pe schemă, date și alte lucruri groovey. Sper că nu primesc prea multe lovituri negre de la asta!

Here's how the new project dialog will look like this

0
adăugat