如何在现有的SqlConnection中使用ADO.net实体框架?

19
  1. 我有一个使用SqlConnection的现有asp.net网站。
  2. 我添加了ADO.net Entity Framework。
  3. 我已成功连接到数据库并创建了.edmx文件。
  4. 我能够使用自动生成的连接字符串通过Entity Framework进行连接。

我想要为Entity Framework连接使用我在整个网站中使用的现有SqlConnection对象。
我不想为使用ADO.net Entity Framework的页面使用第二个数据库连接,也不想更改整个站点以使用新的Entity Framework连接字符串。

感谢您提供的任何帮助。

3个回答

23

那个论坛帖子有答案:

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
谢谢, 现在我遇到了这个错误:MetadataWorkspace必须预先注册EdmItemCollection。该项目是一个带有.edmx文件的Asp.net Web页面。我认为它没有从.edmx文件中获取数据。 - EZ.
3
我遇到了同样的问题,但是当我把Assembly.GetExecutingAssembly() 改成 Assembly.GetAssembly(typeof(NorthwindEntities))后,它很好地解决了。 - Hath
1
将程序集更改为Assembly.GetAssembly(typeof(NorthwindEntities))对我没有起作用。 - Kyle

1

您可以通过使用接受EntityConnection的生成的ObjectContext的构造函数来实现此操作。当您创建EntityConnection时,需要传入您的SqlConnection。


我已经在System.Data.EntityClient.EntityConnection上绕了好几圈了。它就在我的指尖,但是我似乎无法使MetadataWorkspace参数正常工作。 - EZ.

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接