2

エンティティフレームワークコンテキストを別のELレイヤーに持っています。これはエンティティレイヤーを表し、次にDALに移動し、次にBLとユーザーインターフェイスaspx.csコードページに移動します。同じ中でIDisposableを使用する方法として私は混乱しています。私が今までやっているのは、私のDALで、自分のエンティティのコンテキストを持っていることです。

namespace abc
{
    public class Action: IDisposable
    {
        Entities context = new Entities();
        // all the methods

        public void Dispose()
        {
            context.Dispose();
        }
    }
}

それは正しい方法ですか?私はただのナイーブなプログラマーなので、同じロジックを学ぶのを手伝ってください。

4

2 に答える 2

4

個人的には、次のように少し変更しIDisposableます。EntityFramework内での実装の経験はほとんどありませんが。

namespace abc
{
    public class Action: IDisposable
    {
        private bool _disposed;

        Entities context= new Entities();
        // all the methods

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                if (disposing)
                {
                    context.Dispose();
                    // Dispose other managed resources.
                }
                //release unmanaged resources.
            }
            _disposed = true;
        }
    }
}
于 2013-03-01T14:45:58.200 に答える
2

一般的に、はい、あなたのDisposeメソッドはIDisposable、管理されていないリソース(ファイルなど)だけでなく、実装するすべてのリソースを破棄する必要があります

ただし、通常、リソースとしてEFコンテキストを保持することは適切な設計ではありません。メソッドContext内にinsideを作成し、それが終わったら破棄すると、より良い成功を収めることができます。次に、それが唯一のリソースである場合は、を実装する必要はまったくActionありません。IDisposable

于 2013-03-01T14:41:31.857 に答える