Как передать существующее SqlConnection нескольким ObjectContexts - PullRequest
1 голос
/ 24 августа 2011

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

Это пример кода:

public bool InsertObjects<T>(TransactionScope transaction, SqlConnection sqlConnection, IEnumerable<T> objectsToInsert)
{
using (EntityConnection conn = GetEntityConnection())
    {
        Type objectContextType;
        ObjectContext objectContext = (ObjectContext) Activator.CreateInstance(objectContextType, new object[] {conn});

        //Some code using the objectContext

    }
}

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Это не похоже на хороший подход.Почему вы это делаете?Для этого вам необходимо:

  • Использовать одну и ту же строку подключения для всех контекстов = одну и ту же базу данных
  • Использовать одни и те же метаданные (сопоставление) для всех контекстов или передавать отдельные метаданныеустановить для каждого контекста
  • Соединение должно быть закрыто до тех пор, пока не будут созданы все контексты, если какой-либо контекст или операция откроет соединение, следующее создание контекста не удастся

Так что, если вы не используете некоторыесложная база данных, где отображение было разделено на несколько EDMX, вся эта концепция неверна.Одна операция над одной базой данных = одна единица работы = один контекст = одно соединение.В вашем случае это выглядит так, как будто вы хотите сделать это с одним типом сущности - ПОЧЕМУ?

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

0 голосов
/ 26 августа 2011

Лучшим решением будет пул соединений.
Создайте в объекте объект подключения, включите параметры пула.
В следующий раз, когда вы подключитесь, он проверит, активно ли соединение и использует его.
Если соединения нет, оно будет установлено.

Вот руководство по использованию пулов соединений

...