Могу ли я использовать соединение из Entity Framework или создать новое? - PullRequest
1 голос
/ 26 июля 2011

У меня есть база данных SQLite, к которой я обращаюсь, используя System.Data.SQLite .База данных считывается в мой объектный контекст Entity Framework.Однако в некоторых случаях мне также необходим прямой доступ к базе данных.

  1. Могу ли я / должен ли я использовать то же соединение, которое использует мой объектный контекст Entity Framework?Т.е. ObjectContext.Connection?
  2. Если да, как я могу получить к нему доступ?Приведение Entities.Connection к SQLiteConnection приводит к "Невозможно привести объект типа 'System.Data.EntityClient.EntityConnection' к типу 'System.Data.SQLite.SQLiteConnection'."
  3. Если нет, то следует ли мне создать отдельное соединение, открыть его и оставить открытым на время действия приложения, или мне следует открывать и закрывать соединение каждый раз, когда я хочу получить к нему доступ к базе данных?

Ответы [ 3 ]

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

ObjectContext.Connection является EntityConnection. Вы можете получить подключение к магазину через:

var sc = ((EntityConnection)ObjectContext.Connection).StoreConnection;

Вы можете привести это к SQLiteConnection.

Можно использовать это соединение, если оно вам нужно.

Но, как упоминал @Chris, вы можете просто использовать ObjectContext.ExecuteStoreQuery и т. Д., Если это подойдет вам.

0 голосов
/ 26 июля 2011

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

0 голосов
/ 26 июля 2011

Если вы используете API-интерфейс DBContext, вы можете выполнить прямой запрос, используя следующее: aDBContext.Database.SqlQuery

Я не удивлюсь, если что-то подобное существует для API ObjectContext, но я едва использовал это и поэтому не могу сказать вам, что это такое.

Теперь, если по какой-то причине вы не можете (или не хотите) сделать это, я бы создал новое соединение для ваших пользовательских запросов. Поместите их в «Использование» и закройте, как только закончите.

...