Единица работы и Entity Framework - вычисляемые свойства - PullRequest
0 голосов
/ 31 марта 2012

Предполагая, что у меня есть следующий объект 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();
    }
}

Как я могу иметь дело с тем, что объект POCO знает о хранилище / контексте, используя правильную реализацию UnitOfWork?

Я изучал IoC и внедрение зависимостей, но я слишком глуп, чтобы понять это из рук вон.

Какое-то просветление?

1 Ответ

1 голос
/ 03 апреля 2012

Не прочитав обновление, которое вы упоминаете в своем комментарии, я могу сказать, что вы должны получить Сумасшедшие сущности из репозитория в каком-либо объекте доменной службы, выполнить любые необходимые вычисления и назначить результат своей сущности.

Кроме того, в идеале, если вы хотите изучить внедрение зависимостей (с нашим без контейнера 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;
   }
}

Надеюсь, это даст вам несколько идей. Возможно, после того, как вы обновите свой вопрос, я смогу поправиться в контексте того, что вам нужно.

Привет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...