UnitOfWork + Шаблоны репозитория и олицетворение Entity Framework - PullRequest
0 голосов
/ 30 ноября 2011

Я использовал шаблоны UnitOfWork и Repository в своем приложении с EF.

На самом деле мой дизайн предусматривает, что UnitOfWork будет создавать класс ObjectContext и внедрять его в конкретный класс Repository. Например:

UnitOfWork.cs (инициализация)

public DefaultUnitOfWork() {
    if (_context == null) {
        _context = new MyDataContext(ConfigSingleton.GetInstance().ConnectionString);
    }
}

UnitOfWork.cs (получение экземпляра репозитория)

public CustomerRepository Customers {
    get {
        if (_customers == null) {
            _customers = new CustomerRepository(_context);
        }
        return _customers;
    }
}

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

Теперь мне нужно выполнить свои запросы, олицетворяющие удостоверение пула приложений, поэтому я решил обернуть код в конструкторе UnitOfWork в олицетворение.

К сожалению, это не работает, потому что ObjectContext затем передается в конструктор репозитория и используется позже, когда клиент репозитория вызывает, например, FindAll().

Я обнаружил, что реальное соединение с базой данных устанавливается прямо перед выполнением запроса Entity Framework, а не точно, когда я создаю сам ObjectContext.

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 05 февраля 2012

Вы можете использовать одну или несколько Фабрик ObjectContext (для создания ObjectContexts), используя различные критерии создания, такие как Строка Соединения, например. Ваш UnitOfWork может использовать фабрику для получения своего контекста, как и репозиторий, но я думаю, что вы упустили смысл UnitOfWork, если он использует другой объектный контекст, чем ваш репозиторий.

UnitOfWork должен состоять из одной или нескольких операций, которые должны выполняться вместе, что может легко использовать несколько репозиториев. Если репозитории имеют свои собственные ObjectContexts, отдельные от UnitOfWork, я не вижу, как фиксация UnitOfWork достигнет своей цели.

Я думаю, что либо я неправильно истолковал ваш вопрос, либо вы пропустили некоторые важные детали. Удачи!

...