Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wcf每次调用实例模式下的实体框架DbContext_Wcf_Entity Framework_Structuremap_Repository Pattern - Fatal编程技术网

wcf每次调用实例模式下的实体框架DbContext

wcf每次调用实例模式下的实体框架DbContext,wcf,entity-framework,structuremap,repository-pattern,Wcf,Entity Framework,Structuremap,Repository Pattern,我有一个这样的存储库 public abstract class BaseRepository<TEntity> : IRepository<TEntity> where TEntity : class { protected DbContext _dbContext; public BaseRepository(DbContext dbContext) { _dbContext = dbContext; } p

我有一个这样的存储库

public abstract class BaseRepository<TEntity> : IRepository<TEntity> where TEntity : class
{
    protected DbContext _dbContext;

    public BaseRepository(DbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public TEntity GetByKey(object keyValue)
    {
        // todo
    }
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class CustomerSatisfactionService : ICustomerSatisfactionService
{
    private ICustomerRepository _customerRepository;
    private IHelpDeskRepository _helpdeskRepository;


    public AccountService(ICustomerRepository customerRepository,IHelpdeskRepository  helpdeskRepository)
    {
        _customerRepository = customerRepository;
        _helpdeskRepository = helpdeskRepository;
    }

    public void DoSomethingUsingBothRepositories()
    {
         //   start unit of work
         // _customerRepository.DoSomething();
         // _helpdeskRepository.DoSomething();
         // commit unit of work
    }


 }
For<DbContext>().Use(() => new MyApplicationContext());
我用它来注入DbContext实例,就像这样

public abstract class BaseRepository<TEntity> : IRepository<TEntity> where TEntity : class
{
    protected DbContext _dbContext;

    public BaseRepository(DbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public TEntity GetByKey(object keyValue)
    {
        // todo
    }
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class CustomerSatisfactionService : ICustomerSatisfactionService
{
    private ICustomerRepository _customerRepository;
    private IHelpDeskRepository _helpdeskRepository;


    public AccountService(ICustomerRepository customerRepository,IHelpdeskRepository  helpdeskRepository)
    {
        _customerRepository = customerRepository;
        _helpdeskRepository = helpdeskRepository;
    }

    public void DoSomethingUsingBothRepositories()
    {
         //   start unit of work
         // _customerRepository.DoSomething();
         // _helpdeskRepository.DoSomething();
         // commit unit of work
    }


 }
For<DbContext>().Use(() => new MyApplicationContext());
For()。使用(()=>new MyApplicationContext());
我的问题是,当客户端调用该服务时,会创建一个新的
CustomerStatispationService
实例,因此会创建
CustomerRepository
HelpdeskRepository
的新实例,但具有不同的DBContext

我想实现工作单元模式,但是在使用三个位置的doSomethingWhatThrespositions方法中,这两个存储库具有不同的DBContext


有没有办法告诉structure map在每次调用的基础上启动DbContext实例?

必须为DbContext指定生命周期,以便每次调用只创建一个实例。StructureMap不包含每次调用WCF的内置生命周期管理,但您可以在上找到一个实现

您需要实现UnitOfWork模式,以便在实体之间共享相同的上下文。请看一看如何实现它

我不知道您是否需要/想要StructureMap来控制dbcontext的实例化,请查看此回复、UoW和UoW Factory setup dbcontext,了解需要在存储库中进行的调用


DbContext已经是工作单元实现,因此这并不能解决像IoC一样的结构映射中的生命周期管理问题。如果所有存储库都使用了相同的上下文,则是如此。由于上下文包含在存储库中,为了使其工作,需要一些管理上下文的解决方案。工作单元就是这样一种方式。另一种方法是使用创建并返回相同上下文的上下文工厂。IMHO,这里强调的问题不是上下文的生存期,而是每个存储库在同一调用中获得不同的上下文。一旦使用任何模式解决了这个问题,就可以使用任何DI来创建上下文。如果您想将上下文注入存储库,并将存储库注入服务,生命周期管理正好解决了这个问题。它解决了这一问题,没有对UoWFactory的任何内部依赖。但这只是架构决定。@amit..在那篇文章中..DbContext通过构造函数提供给存储库..但我想通过dependencyInjection(即通过structureMap)提供它…structureMap为每个存储库创建新实例..但我希望它为每个wcf请求创建新实例..您好Jtew…这个问题无法回答我的问题..我希望两个存储库使用相同的上下文..如果我不使用DI,但是我想和DIhi Ladislav一起做…似乎这是一个解决方案…我会尝试让你知道…谢谢。我在这里找到了确切的答案,你的博客链接断了。