Как правильно расположить ObjectContext в шаблоне Репозиторий и Единица работы - PullRequest
1 голос
/ 05 июля 2011

Я использую Entity Framework 4 и создал класс UnitOfWork, который создает мой Контекст и предоставляет его через открытое свойство в качестве интерфейса IContext.Класс Context наследует от ObjectContext и предоставляет мои сущности Poco как открытые свойства, например:

public IObjectSet<User> Users
        {
            get { return _users ?? (_users = CreateObjectSet<User>("Users")); }
        }
private IObjectSet<User> _users;

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

using(var uow = new UnitOfWork(connectionstring))
{
using(var repository = new UserRepository(uio.Context))
{
//This is the place where a connection is opened in the database
var user = repository.GetUserByName(username);
}
    }

//The connection is still open here even though 

Класс UnitOfWork реализует интерфейс IDisposable и вызывает Context.Dispose () внутри его метода Dispose.

Когда я закрываю свое приложение,Открытое соединение в моей базе данных пропало, поэтому мой вопрос: что здесь происходит?:-) Как правильно расположить экземпляр Context (ObjectContext) в моем классе UnitOfWork, чтобы закрыть открытое соединение в моей базе данных?

1 Ответ

1 голос
/ 05 июля 2011

Я думаю, что вы делаете все правильно, чтобы избавиться от контекста. Поставщик Sql Server поддерживает пул соединений, поэтому после конца блока using(var uow = new UnitOfWork(connectionstring)) вы видите соединение в пуле.

Подробнее о пуле подключений см. В этой статье: http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

...