Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Единица работы и Entity Framework - вычисляемые свойства

Автор вопроса: johnildergleidissonОтветов: 1

Предполагая, что у меня есть следующий объект 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 и внедрение зависимостей, но я слишком глуп, чтобы понять это из летучей мыши.

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

  • Итак... какая именно причина заставляет вас хранить ссылку на репозиторий внутри вашей сущности? Прямо сейчас метод WellIDependOnMyRepository выглядит так, как будто он принадлежит SomeEntityRepository, а не SomeEntity. surfen 31.03.2012
  • Да, этот пример не отражает реальной проблемы, с которой я столкнулся, и я уходил с работы в спешке. Ты прав. Я отредактирую свой вопрос, указав более точный код, когда буду дома, так как уверен, что это поможет мне получить более качественные ответы. johnildergleidisson 31.03.2012

dependency-injectioninversion-of-controlunit-of-work

Ответы

Ответ 1 · рейтинг 1 · Sergio Romero

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

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

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

С Уважением.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы