それは難しい:
public class RequestService : IDisposable
{
requestDBEntities db;
public RequestService() //Constructor
{
db = new requestDBEntities();
}
public List<RequestStatus> ddlFill()
{
return (from rs in db.reqStatus select rs).ToList();
}
//Some Insert,Update,Delete methods {}...
public void Dispose()
{
db.Dispose(); //<--Dispose requestDBEntities();
GC.SuppressFinalize(this);
}
そして第二のアプローチ:コードビハインド
public class RequestService : IDisposable
{
requestDBEntities db;
public List<RequestStatus> ddlFill()
{
using (db = new requestDBEntities())
return (from rs in db.reqStatus select rs).ToList();
}
//Some Insert,Update,Delete methods {}...
public void Dispose()
{
GC.SuppressFinalize(this);
}
ページ これは最初の(私の)アプローチであります私たちはあなたの正確なデザインの選択肢を知らないので、より良いアプローチであると言うことは不可能です。単純なアプリの観点からは、2つの例が同等(多かれ少なかれ)であるように見えるかもしれませんが、実際はまったく異なる方法で動作します。
ここでの基本的な質問は、db
の寿命は、同封のRequestService
インスタンスの寿命に匹敵するはずですか?
「はい」の場合は、最初のコード例が役立ちます。リソースは期待どおりに管理されます(db
は、オブジェクトにリソースの廃棄を依頼されると同時に内容を破棄します)。また、2つのライフタイムはほぼ同じになります。db
はコンストラクタで構築され、db
そのRequestService
オブジェクトが回収可能になるとすぐに回収可能)。
答えは「ノー」である場合には、その後、第二の例は、(ほぼ)物事を行うための方法です - あなたはdb
からRequestStatus
オブジェクトのコレクションビューを生成するので、あなたは本当に周りのdb
を維持する理由がありませんもう長い。スタックの値で十分で余分なクラスメンバーの
public List<RequestStatus> ddlFill()
{
using (var db = new requestDBEntities())
return (from rs in db.reqStatus select rs).ToList();
}
不要:しかし、これは少し改善するために、私はddlFill
メソッド内にdb
の範囲を制限する提案することができます。
ありがとう、この情報は私にとって非常に説明的です。 – blackraist