私はいくつかの未解決の問題を証明するまで、私は新しい技術を使用することに移行することができないので、私の上司と一緒になっています。主な問題の1つは、リポジトリが接続を処理する方法です。おそらく最大のオーバーヘッドの1つは、データベースへの接続およびデータベースからの切断です。リポジトリ接続プール
public ContractsControlRepository()
: base(ConfigurationManager.ConnectionStrings["AccountsConnectionString"].ToString()) { }
そうのようなクラスを::のような機能を持つ
public class ContractsControlRepository : DataContext, IContractsControlRepository
:私は、私は次のようにしますリポジトリがある場合
public IEnumerable<COContractCostCentre> ListContractCostCentres(int contractID)
{
string query = "SELECT C.ContractID, C.CCCode, MAC.CostCentre, C.Percentage FROM tblCC_Contract_CC C JOIN tblMA_CostCentre MAC ON MAC.CCCode = C.CCCode WHERE C.ContractID = {0}";
return this.ExecuteQuery<COContractCostCentre>(query, contractID);
}
今私のコントローラのアクションで呼び出された場合を_contractsControlRepository.ListContractCostCentres(2)
直後にリポジトリへの別の呼び出しが行われ、同じ接続が使用されますか?コントローラではいつ接続が開いていますか?いつ閉じますか?彼のASP.NET MVC bookにSteve Sandersonにより示唆されるように、私は手書きLINQを使用してい
乾杯
EDIT
。明確にするために
編集編集
、私は私のORMとしてLINQを使用していますが、(上記の抜粋に示すように)私は、クエリのために生のSQLクエリを使用しています。たとえば、次のコントローラアクションがあります。
public ActionResult EditBusiness(string id)
{
Business business = _contractsControlRepository.FetchBusinessByID(id);
return View(business);
}
私は接続を開いたり閉じたりしません。ここで
が私のレポのより大きく、より完全なエキスです:
public class ContractsControlRepository : DataContext, IContractsControlRepository
{
public ContractsControlRepository()
: base(ConfigurationManager.ConnectionStrings["AccountsConnectionString"].ToString()) { }
public IEnumerable<COContractCostCentre> ListContractCostCentres(int contractID)
{
string query = "SELECT C.ContractID, C.CCCode, MAC.CostCentre, C.Percentage FROM tblCC_Contract_CC C JOIN tblMA_CostCentre MAC ON MAC.CCCode = C.CCCode WHERE C.ContractID = {0}";
return this.ExecuteQuery<COContractCostCentre>(query, contractID);
}
その後ContractsControlRepositoryは私のコントローラ内でインスタンス化し、_contractsControlRepository.ListContractCostCentres(2)のように使用されます。接続は手動では開かず、DataContextはそれを処理します。
これは、リポジトリコードを生成するために使用しているものによって異なります。だから、どのORMソフトウェアを使用していますか? – blowdart
@ Kezzer-私はその本を持っていますが、SteveはLINQ to SQLモデルの属性を(ドラッグアンドドロップとは対照的に)使用していますが、インラインSQLを使用する本のどこにも表示されません。本では、クエリはLINQを使って書かれています。 – RichardOD
私はそれを知っていますが、私たちのシステムの要件は、SQLクエリを生成するためにLINQ to SQLを使用しないことです。LINQ to SQLをORMツールとして使用し、クエリのインラインクエリを使用します。私の上司が私にそう言っているので、私はこれを行う必要があります。私はそれに同意しない、私は彼にLINQ to SQLクエリが直接SQLクエリよりも遅くないことを証明するまで選択肢がない。 – Kezzer