1

我将 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

    }
}
4

2 回答 2

1

这似乎不是一个好方法。你为什么做这个?要完成这项工作,您必须:

  • 对所有上下文使用相同的连接字符串 = 相同的数据库
  • 对所有上下文使用相同的元数据(映射)或为每个上下文传递单独的元数据集
  • 如果任何上下文或操作打开连接,则必须关闭连接直到创建所有上下文,下一个上下文创建将失败

因此,除非您使用一些复杂的数据库,其中映射被划分为多个 EDMX,否则整个概念都是错误的。一个数据库上的一项操作 = 一个工作单元 = 一个上下文 = 一个连接。在您的情况下,您似乎想使用单一实体类型执行此操作 - 为什么?

此外,将自己的集合传递给对象上下文将不允许上下文以最佳方式处理连接(在不需要时释放它)。

于 2011-08-24T20:10:05.833 回答
0

更好的解决方案是连接池。
在对象中创建一个连接对象,使用池选项进行连接。
下次连接时,它将检查连接是否仍处于活动状态并使用它。
如果没有连接,它将建立一个。

这是有关如何使用连接池的指南

于 2011-08-25T21:07:27.373 回答