Как использовать ADO.net Entity Framework с существующим SqlConnection?
- У меня есть существующий сайт asp.net, который использует SqlConnection.
- Я добавил структуру Entity Framework ADO.net.
- Я успешно подключился к базе данных и создал файл .edmx.
- Я могу подключиться через Entity Framework с автоматически создаваемой строкой соединения.
Я хочу использовать существующий объект SqlConnection, который я использую на всем сайте для подключения Entity Framework.
Я не хочу использовать второе соединение с базой данных для одной страницы, которая будет использовать ADO.net Entity Framework, и я не хочу изменять весь сайт, чтобы использовать новую строку подключения Entity Framework.
Спасибо за любую помощь, которую вы можете предоставить.
Ответы
Ответ 1
У этого сообщения форума есть ответ:
MetadataWorkspace workspace = new MetadataWorkspace(
new string[] { "res://*/" },
new Assembly[] { Assembly.GetExecutingAssembly() });
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
using (EntityConnection entityConnection = new EntityConnection(workspace, sqlConnection))
using (NorthwindEntities context = new NorthwindEntities(entityConnection))
{
foreach (var product in context.Products)
{
Console.WriteLine(product.ProductName);
}
}
"res://*/" является частью вашей строки подключения EF, которая описывает расположение ваших файлов сопоставления xml - в этом случае встроенные ресурсы в текущей сборке.
Ответ 2
Вы можете сделать это, используя конструктор вашего сгенерированного объекта ObjectContext, который принимает EntityConnection. Когда вы создаете EntityConnection, вы передаете свой SqlConnection.
Ответ 3
Эндрю Петерс,
Спасибо за ваш ответ.
Я общаюсь с System.Data.EntityClient.EntityConnection.
Он находится прямо у меня на кончиках пальцев, но я не могу заставить параметр MetadataWorkspace работать.
Это самый близкий пример, который я нашел (сообщение с пометкой "Ответ" ):
http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/dd7b1c41-e428-4e29-ab83-448d3f529ba4/
Спасибо за любую помощь.