SqlConnection Singleton - PullRequest
       13

SqlConnection Singleton

4 голосов
/ 04 марта 2010

Привет, я хотел бы спросить, является ли хорошей идеей создание Singleton, чтобы иметь только одно активное соединение с БД. Что я хотел бы сделать, это: 1) у меня есть сервис wcf 2) сервис wcf получает данные из БД 3) я хотел бы создать подобный синглтон, чтобы иметь только одно соединение с БД:

private static PersistanceSingleton _Instance;
    public static PersistanceSingleton Instance
    {
        get
        {
            if (_Instance == null)
            {
                _Instance = new PersistanceSingleton();
            }
            return _Instance;
        }
    }

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

_DBPersistanceSingleton = PersistanceSingleton.Instance;

Затем, когда приходит какой-то запрос (например, GetUsersRequest), я хотел бы сделать что-то вроде:

_DBPersistanceSingleton.GetUsers()

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

Ответы [ 3 ]

13 голосов
/ 04 марта 2010

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

3 голосов
/ 04 марта 2010

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

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

1 голос
/ 04 марта 2010

Отмена подключения sql ...

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

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

...