工作单元和实体框架 - 计算属性

时间:2012-03-30 21:34:58

标签: dependency-injection entity-framework-4.1 inversion-of-control unit-of-work

假设我有以下POCO实体:

public class SomeEntity
{
    public int SomeProperty { get; set; }
}

以及以下存储库

public class SomeEntityRepository
{
    Context _context;
    public SomeEntityRepository(Context context)
    {
        _context = context;
    }

    public List<SomeEntity> GetCrazyEntities()
    {
        return _context.SomeEntities.Where(se => se.SomeProperty > 500).ToList();
    }
}

然后由于某种原因,我必须在SomeEntity上实现一个计算属性,如:

class SomeEntity
{
    ...
    public List<SomeEntity> WellIDependOnMyOnRepositry()
    {
        ...
        return theRepository.GetCrazyEntities().Where(se => se.SomeProperty < 505).ToList();
    }
}

如何使用正确的UnitOfWork实现来处理POCO实体知道存储库/上下文?

我一直在研究IoC和依赖注入,但是我太愚蠢了,无法理解它。

一些启示?

1 个答案:

答案 0 :(得分:1)

如果没有阅读您在评论中提到的更新,我可以说您应该从某个域服务对象的存储库中获取疯狂实体,执行您需要的任何计算并将结果分配给您的实体。

另外,理想情况下,如果您想查看依赖注入(我们没有IoC容器),您的存储库应该实现一个接口。

如下所示:

public interface ISomeEntityRepository
{
   List<SomeEntity> GetCrazyEntities();
}

public class SomeEntityRepository : ISomeEntityRepository
{
   // ... Implementation goes here.
}

public class MyDomainService
{
   private readonly ISomeEntityRepository Repository;

   public MyDomainService(ISomeEntityRepository repository)
   {
      Repository = repository;
   }

   public SomeEntity WorkWithCrazyEntity()
   {
      var something = Repository.GetCrazyEntities();

      var result = //.... do all sort of crazy calculation.

      var someEntity = new SomeEntity();

      someEntity.CalculatedProperty = result;

      return someEntity;
   }
}

希望这会给你一些想法。也许在你更新你的问题之后,我可以在你需要什么的背景下变得更好。

问候。