帮助改进UnitOfWork-Interface

时间:2011-03-16 08:26:20

标签: c# .net repository-pattern unit-of-work

我尽力实现一种将数据存储到datacontext的UnitOfWork。在没有太多解释的情况下,我希望能够在相同的使用中执行两个查询。

拿这个,

using (IDataUnitOfWork uow = new Data.SomeContext.Core())
{
  CustomerRepo repo = new CustomerRepo(uow);
  Data.Entities.Customer c = repo.GetCustomerById(191);
  ...
  c.name = c.name.Replace("_", "");
  //c.name = c.name + "_";
  //uow.Save();
}

我觉得这是完成任务的一种非常明确和明确的方式。不过,现在,我还有另一个背景。在某些情况下,此任务也必须在第二个上下文中执行。

using (IDataUnitOfWork uow = new Provider.TheProviderContext())
{
  CustomerRepo repo = new CustomerRepo(uow);
  Data.Entities.Customer c = repo.GetCustomerById(191);
  ...
  c.name = c.name.Replace("_", "");
  //c.name = c.name + "_";
  //uow.Save();
}

该背景并非基于相同的技术,但我认为上述示例将反映我尝试做(并且需要)的内容。此刻我只能通过这种方式来解决它,

using (IDataUnitOfWork uow = new Data.SomeContext.Core())
{
  ...
  if (anything == true) 
    using (IDataUnitOfWork uow = new Provider.TheProviderContext())
    {
      ...
    }
}

这看起来像一个漂亮而清晰的工作方式(bcz所有信息已经为第二个'使用'所知。纠正我,如果我在这里完全错误,因为我只有这个计划好了。但如果我可以打电话,它会更好。

using (IDataUnitOfWork uow = new BothProviders())

..反过来调用两个提供者并同时为每个提供者运行任务。我对工厂感兴趣,但有点令人困惑(还)。我的技能今天在这里明确地结束了,遗憾的是要说..

1 个答案:

答案 0 :(得分:1)

取决于你想要达到的目标。请记住,工作单元使整个操作成为原子。如果要统一提供者,请考虑适配器模式

当你想在同一个抽象级别支持(统一)多个不同的接口时,

适配器模式是合适的,就像在你的情况下两个UnitOfWork一样,我想它会做不同的事情。