Frage

Ich arbeite an einem Projekt mit einem DB von etwa 30 Tischen und etwa 100 gespeicherten Verfahren (MSSQL).

  1. Der gesamte DAL -Code wird mit dem Datenzugriffsanwendungsblock implementiert. Ich glaube, dass dieser Ansatz zu viel Zeit braucht, auch wenn ich nur ein neues Feld zu einer existierenden Tabelle hinzufügen muss. Zuerst muss ich die DB -Skripte aktualisieren, dann muss ich die SP -Wrapper und/oder Abfragen, die wir im Code haben, überprüfen, um meine Änderungen widerzuspiegeln.

  2. Der größte Teil von Dal (90%) ist wie folgt:

    // "idiom #1" for my project
    public static DataSet GetSomeData(int a, int b)
    {
       return SqlHelper.ExecuteDataSet(
         connection, 
         "select x, y from tab1 where a = " + 
         a.ToString() + 
         " and b = " + 
         b.ToString());
    }
    

    Dann, wenn dies von irgendwohin gerufen wird:

    // "idiom #2"
    var ds = DAL.GetSomeData(123, 456);
    var t = ds.Tables[0];
    var x = t.Rows[0][0];
    var y = t.Rows[0][1];
    

    Ich bin fest davon überzeugt, dass diese Idee wirklich schrecklich ist, aber ich bin mir nicht ganz sicher, was der richtige Ansatz ist. Ich bin mir absolut sicher, dass das, was ich gerne sehen würde, zumindest typisierte Objekte anstelle von DataSarows und Sammlungen dieser Objekte anstelle von DataTables. Ich bin mir auch sicher, dass ich all diese Dinge nicht alleine implementieren möchte.

  3. Vor ein paar Tagen habe ich Bltoolkit gefunden, das dieses Problem zu lösen scheint, aber ich bin mir nicht sicher, ob es eine gute Idee ist, es zu verwenden, da ich nicht genug Erfahrung damit habe. Dieses Beispiel hat mir sehr gut gefallen:

    public abstract class PersonAccessor : DataAccessor
    {
      [SqlText(@"SELECT * FROM Person WHERE FirstName = @firstName")]
      public abstract List<Person> GetPersonListByFirstName(string @firstName);
    
      [SprocName("sp_GetPersonListByLastName")]
      public abstract List<Person> GetPersonListByLastName(string @lastName);
      ...
    

    Obwohl ich es nicht Orm nennen kann, ist dieser Ansatz abstrakt-genug für mich, um mich zu wollen, anstatt das, was ich derzeit habe, aber auf der anderen Seite ist es immer noch ziemlich niedrig.

  4. Ich habe auch fließend Nhibernate ausprobiert und es scheint sehr langsam zu sein, obwohl ich seine Funktionen wirklich mag.

Was ist hier die richtige Lösung? Die Prioritäten sind:

  1. Es ist leicht zu reflektieren Veränderungen der DB -Struktur
  2. Tippte Daten statt int.Parse(row[0][3].ToString())
  3. Hochleistung
War es hilfreich?

Lösung

Ich würde vorschlagen, dass Sie ein .NET -Orm verwenden. Weitere Informationen zur Auswahl eines Orms finden Sie hier:

Nhibernate, Entity Framework, Active Records oder LINQ2SQL

Ausführen "Select * von Person, wo FirstName = @Firstname" mit einem ORM nicht merklich langsamer sein wird und Ihre Entwicklungsgeschwindigkeit das Potenzial hat, viel schneller zu sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top