2011-07-25 1 views
0

私は約30のテーブルと約100のストアドプロシージャ(MSSQL)のDBを持つプロジェクトに取り組んでいます。DB-firstで.NETでDALを実装する

  1. すべてのDALコードは、データアクセスアプリケーションブロックを使用して実装されています。私は、このアプローチは、既存のテーブルに新しいフィールドを追加するだけでも時間がかかりすぎると考えています。最初に、私はDBスクリプトを更新しなければなりません、そして、私は私の変更を反映するためにコード内にあるSPラッパーやクエリをチェックしなければなりません。

  2. このようなものです(90%)DALのほとんど:

    // "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()); 
    } 
    

    その後、これはどこかから呼び出されたとき:

    // "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]; 
    

    私はこのアイデアが本当にひどいであることを固く信じています、しかし私は、正しいアプローチが何であるか正確にはわかりません。私は、DataTablesの代わりに、DataRowsやこれらのオブジェクトのコレクションの代わりに少なくとも型付けされたオブジェクトを見たいと思っていることを確信しています。私は自分自身ですべてのものを実装したくないと確信しています。

  3. 数日前、私はこの問題を解決するようなBLToolkitを見つけましたが、十分な経験がないので、使用することをお勧めしますか?私が作るために私が代わりに私が現在持っているもので、それをしたいが、他の側に、それはまだだ私はORMそれを呼び出すことはできませんが

    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); 
        ... 
    

    、このアプローチは抽象-十分です:私は本当にこの例を言っていますかなり低いレベル。

  4. 私もFluent NHibernateを試してみましたが、実際には機能はとても気に入りましたが、実際は遅いようです。

ここで適切な解決策はありますか?優先順位は以下のとおりです。

  1. 簡単にDBの構造を反映する代わりにint.Parse(row[0][3].ToString())
  2. 高性能の
  3. 型付きデータを変更

答えて

1

私はあなたが.NETのORMを使用することを示唆しています。あなたはここにORMの選択についての詳細を学ぶことができます。

NHibernate, Entity Framework, active records or linq2sql ORMを使用して著しく遅くなるだろうされていませんし、開発スピードがなる可能性を秘めている「姓= @FirstNameは人SELECT * FROM」実行

はるかに高速。

関連する問題