大量のドロップダウンと繰り返しリストを使用するシステムを開発しています。したがって、コードの繰り返しを避けるために を作成しましたDropDownManagerClass()
。これにより、システムのどこからでも Customers ドロップダウンを呼び出すことができます。
public class DropDownManager:BaseManagerClass
{
public DropDownManager(String connectionString)
: base(connectionString)
{
}
public IEnumerable<SelectListItem> GetCustomerDD()
{
this.OpenConnection();
IEnumerable<SelectListItem> dropDown = this._context.Customers.Select(m => new SelectListItem { Text = m.Description, Value = m.CustomerID.ToString() });
this.CloseConnection();
return dropDown;
}
}
次に、この使い捨てマネージャー クラスを呼び出してモデルにデータを入力します。オブジェクトを破棄して、データベースへの接続をクリーンアップしていることがわかります。
DropDownManager dropdown = new DropDownManager(Global.ConnectionString);
IEnumerable<SelectListItem> customers = dropdown.GetCustomerDD();
IEnumerable<SelectListItem> suppliers= dropdown.GetSuppliersDD();
model.CustomersDD= customers;
model.SuppliersDD= suppliers;
dropdown.Dispose();
デバッグすると、顧客とサプライヤが SQL ステートメントを持っていることに気付きます。したがって、私の見解では、これがSQLを実行してデータを取得しようとしているところだと思いますが、破棄するとdropdown
エラーがスローされます。削除するdropdown.Dispose()
と、コードが機能します。
私の見解
@Html.DropDownListFor(m => m.Customer.CustomerID, Model.CustomersDD, new { @class = "large" })
モデルにデータを入力して、このマネージャーを効率的に破棄できる方法はありますか?
編集顧客から選択した後に呼び出すと.ToList()
、モデルにまだ結果セットが表示されていることがわかりますが、それでもエラーが発生します