我们正在为使用EF6 ORM的项目之一实施ntier架构。 DbContext 范围由 ContextStoreFactory 管理。基于配置ContextStoreFactory使用 HttpContextStore / StaticContextStore 来创建DbContext。对于控制台应用程序其工作正常现在我们计划使用net.msmq绑定实现 wcf服务,该服务使用底层服务来处理传入请求。
public class TestService : ITestService
{
public void ProcessPerson(Person person)
{
var repo = GetRepository();
var personService = new PersonService(repo);
personService.Process(person);
}
private IRepository GetRepository()
{
var context = ContextStoreFactory.GetContextStore().GetContext();//Calls OperationcontextStore
return new Repository(context);
}
}
我想在wcf服务中管理DbContext范围。我遇到过许多文章,说最好使用DBContext 每次通话/操作。我的示例OperationContextStore如下所示。如果需要更正,请随时更正。
public class OperationContextStore
{
public static readonly string ITEM_NAME = "DBCONTEXT-INSTANCES";
public DBContext GetContext()
{
if(!OperationContext.Current.OutgoingMessageProperties.ContainsKey(ITEM_NAME))
OperationContext.Current.OutgoingMessageProperties.Add(ITEM_NAME, new DBContext());
return (DBContext)OperationContext.Current.OutgoingMessageProperties[ITEM_NAME];
}
public void Dispose()
{}
}
答案 0 :(得分:0)
我知道现在回答我自己的问题已经很晚了,我将会回忆起我的所作所为
我想知道每个调用的DbContext范围在我的方案中是否有效?
是的,它在我的方案中有效。
在我的服务方法中创建存储库的方法是否有效?
我最终将IRepository作为我服务类中的属性并进行了属性注入。
有没有最佳做法可以在不使用IOC的情况下进行连接?
我最终编写了自己的实用程序。请搜索穷人的依赖注射。