Data
私は、主に、、、Services
で区切られたmvc4Webアプリケーションを使用したEntityFrameworkコードファーストアプローチを使用して、階層化されたアプリケーションを構築していますWeb
。
私のウェブから私はこれを行います:
public void Foo() {
EntityService _svc = new EntityService();
Entity = _svc.FindById(1);
}
サービスメソッドは次のようになります。
private readonly MyContext _ctx = new MyContext();
public Entity FindById(long id) {
return _ctx.Entities.SingleOrDefault(q => q.EntityId == id);
}
問題は、各サービスが独自のコンテキストを作成するため、複数のサービスを使用する必要がある場合です。
これを解決しようとして、私は次のようなことをしました:
public class MyContext : DbContext {
private static MyContext _ctx;
public MyContext() : base("name=myConnectionString") { }
public static MyContext GetSharedInstance() {
return GetSharedInstance(false);
}
public static MyContext GetSharedInstance(bool renew) {
if(_ctx == null || renew)
_ctx = new MyContext();
return _ctx;
}
}
私のサービスを次のように変更しました:
public class EntityService
{
private readonly MyContext _ctx;
public bool SharedContext { get; private set; }
public EntityService()
: this(false) { }
public EntityService(bool sharedContext)
: this(sharedContext, false) { }
public EntityService(bool sharedContext, bool renew)
{
SharedContext = sharedContext;
if (SharedContext)
_ctx = MyContext.GetInstance(renew);
else
_ctx = new MyContext();
}
}
ここで、コンテキストのインスタンスを共有したい場合は、次のようにします。
EntityService _entitySvc = new EntityService(true, true);
AnotherEntityService _anotherEntitySvc = new AnotherEntityService(true);
これは、少なくとも、これを克服するための適切な方法ですか?私は提供された助けに感謝します。ありがとう。