我正在将SqlConnection传递给函数。在每个函数中创建多个对象上下文。我想以某种方式使用我为所有对象上下文传递的单个SqlConnection,这样我就可以在单个Transaction范围内使用它,而无需打开分布式事务服务。
这是示例代码:
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
}
}
答案 0 :(得分:1)
这似乎不是一个好方法。你为什么做这个?要完成这项工作,您必须:
因此,除非您使用一些复杂的数据库,其中映射被划分为多个EDMX,这整个概念都是错误的。一个数据库上的一个操作=一个工作单元=一个上下文=一个连接。在您的情况下,您似乎想要使用单一实体类型执行此操作 - 为什么?
此外,将自己的集合传递给对象上下文将不允许上下文以最佳方式处理连接(在不需要它时释放它)。
答案 1 :(得分:0)
更好的解决方案是连接池。
在对象中创建连接对象,连接池化选项
下次连接时,将检查连接是否仍处于活动状态并使用它
如果没有连接则会生成一个。