2

現在、ASP.NET Web アプリに取り組んでおり、同じボイラー プレート コードを何度も何度も書いていることに気づき始めています。

すなわち

        SqlDataReader myReader = null;
        SqlCommand SQLcmd = new SqlCommand();
        SqlConnection SQLConn = new SqlConnection();
        String SQLStatement = "Select this 'nd That";
        SQLConn.ConnectionString = SQLConnectionString;
        SQLConn.Open();
        SQLcmd.Connection = SQLConn;
        SQLcmd.CommandText = SQLStatement;
        myReader = SQLcmd.ExecuteReader();
        while (myReader.Read())
        {
            //Do some awesome
        }
        SQLConn.Close();
    }

.NET の世界では現在、SQL をどのように扱っていますか?

基本的に、そのコードをコピーして貼り付けるのに半日を費やさないようにするにはどうすればよいですか?

誰もが Linq to SQL を使用していますか? もしそうなら、私にチュートリアルを教えてください!

どうもありがとう!

ダニエル

4

4 に答える 4

2

最近の一般的なムードは、ある種のORMを使用することです。

一般的な選択肢は次のとおりです。

Linq2Sql は確かに ORM ですが、Microsoft 内では積極的に開発されていません。

于 2010-10-14T14:54:20.253 に答える
1

ORM を使用します。ORM の詳細については、http://en.wikipedia.org/wiki/Object-relational_mappingにアクセスしてください。.Net のいくつかの選択肢は次のとおりです。

  • NHibernate : 最も強力なものですが、学習曲線が深いです。無料でオープンソース。
  • Entity Framework: EF1 はあまり有望ではありませんでしたが、EF4 が非常に強力であるため、Microsoft はそれに多額の投資をしているようです。ASP.Net 4 について言及されたので、EF4 をご覧になることをお勧めします。
  • SubSonicは学習曲線が速いです。使いやすい。小規模から中規模のアプリケーション IMO に最適です。無料でオープンソース。

最も有名な商用ORM は、 Active RecordLLBLGen (独自の ORM を持ち、OR-Mapping ジェネレーターでもあります)、DevForce (テーブルが10 個未満のデータベースでは無料)
です。利用可能な最も有名な ORM のリスト。

于 2010-10-14T15:15:41.917 に答える
1

ORM を使用するように指示する代わりに、私がどのように ORM を使用するか (記憶から入力) を示します (そして、私はダウンモッドされ、炎上し、他に何を知っているかはわかりません):

私はあなたが私と同じことをしているのを見ます。

    SqlDataReader myReader = null;
    SqlCommand SQLcmd = new SqlCommand();
    SqlConnection SQLConn = new SqlConnection();
    String SQLStatement = "Select this 'nd That";
    SQLConn.ConnectionString = SQLConnectionString;
    SQLConn.Open();
    SQLcmd.Connection = SQLConn;
    SQLcmd.CommandText = SQLStatement;
    myReader = SQLcmd.ExecuteReader();
    while (myReader.Read())
    {
        //Do some awesome
    }
    SQLConn.Close();
}

そして、私は似たようなことをします。新しい SqlCommand、新しい SqlConnection を作成していて、共通の SqlConnectionString (中央の場所からリロードできるようにする必要がありますね?) を使用していることに注意してください。

public class Global{
  public string ConnectionString {get;set;} 
  public Global(){
    ConnectionString = //load from wherever, this allows me to reload it later, via API? ;)
  }
  public SqlCommandFactory(string sprocName, SqlConnection con){
    return new SqlCommand{
      CommandText = sprocName,
      Connection = con,
      CommandTimeout = 0,
      ConnectionTimeout = 0,
      CommandType = StoredProcedure
    };
  }
}

//in my other class that uses this code:
public List<string> /* for simplicity sake, strigns */ GetListOfStringsFromDatabase(){
  List<string> returnValue = new List<string>();

  // use of using ensures that I don't forget to clean something up here!!!!
  using ( SqlConnection con = new SqlConnection(Global.ConnectionString) ) {
    SqlCommand cmd = Global.SqlCommandFactory("mysproc", con);
    cmd.Parameters.Add( "@param1", SqlDbType.VarChar ).Value = "somestring";

    con.Open();
    using ( SqlDataReader reader = cmd.ExecuteReader() ) {
      while (reader.Read()) {
        returnResult.Add( reader[0].ToString() );
      }
    }
  }

return returnValue;
}

しかし、おそらくORMの方が優れているでしょう。私たちの状況にうまく機能すると感じるものではありません。

于 2010-10-14T15:49:17.530 に答える
0

「1つの」方法はありません。Linq to sql を使用する人、Entity Framework を使用する人、nHibernate を使用する人、Enterprise Library データ ブロックを使用する人など...すべては、ニーズと快適に感じるものによって異なります。

于 2010-10-14T14:54:39.617 に答える