0

Контекст: Я пытаюсь понять шаблон UnitOfWork и его связь с репозиториями.Совместное использование NpgsqlСоединение со всеми репозиториями

Но у меня есть основные вопросы, связанные с классом NpgsqlConnnection.

My UnitOfWork содержит частный член поля, который является NpgsqlConnection: uow_connection. И мой репозиторий имеет конструктор, который принимает параметр NpgsqlConnection в качестве параметра и сохраняет его в элементе поля тоже.

[1] Можно ли иметь такой дизайн? (обмен uow_connection среди всех необходимых репозиториев).

Поскольку мой репозиторий не реализовать IDisposable и NpgsqlConnection, кажется неуправляемым Ressource, если сборщик мусора освобождает мое хранилище объект, [3] будет соединение все еще жив?

Я беспокоюсь о том, что весь необходимый репозиторий для текущей транзакции будет иметь одинаковую uow_connection, переданную по значению.

([2] Это нормально думать, что если IDisposable реализуется, так что неуправляемый Ressource или управляемый Ressource может реализует IDisposable и все еще управляемый Ressource?)

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

Спасибо, что нашли время, чтобы прочитать мой вопрос.

ответ

0

[1]. Нет. Npgsql не является потокобезопасным, и вы можете использовать свое совместное соединение между несколькими потоками. Проблемы с резьбой наиболее трудно отслеживать, потому что они, как правило, происходят, когда вы ожидаете меньше всего. (Они также имеют тенденцию появляться больше в вашей рабочей среде :)). Вы должны использовать дизайн создания соединения, открыть его, а затем закрыть. Пул Npgsql позаботится о том, чтобы вы получили готовое соединение, когда захотите.

[3]. Да, ваше соединение будет просачиваться до тех пор, пока сборщик мусора не очистит объекты без каких-либо сильных ссылок.

[2] Обычно IDisposable должен реализовываться только классами, которые содержат неуправляемые ресурсы, поэтому сборщик мусора сможет правильно их обрабатывать. Проверьте эту документацию: http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx

Надеюсь, это поможет.