我是否应该阻止在现有ADO.NET DbContext
中打开实体框架的SqlConnection
连接,前提是它们都使用相同的连接字符串,即在完全相同的数据库上运行?
例如:
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new System.TimeSpan(0, 30, 0)))
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
DoStuffWithEF(connectionString);
...
}
}
void DoStuffWithEF(string connectionString)
{
using (var context = new MyCodeFirstDbContext(connectionString))
{
// basic LINQ queries ...
}
}
鉴于这两种情况,连接是否都可以重用?
连接字符串在两个数据库中都引用相同的SQL Server 2012数据库
例?
是否存在需要MSDTC进行此类操作的危险?
参考方案
连接字符串不是连接。您永远不会将实际的连接传递到上下文,因此必须创建一个新的连接。结果,事务将升级为分布式事务,以覆盖两个连接。
您需要使用the appropriate constructor将实际的连接对象传递给上下文。在这种情况下,将只有一个本地事务,而无需将其升级为分布式事务。
在EF6 +中,您可以simply pass the connection object。将您的方法更改为此:
void DoStuffWithEF(SqlConnection connection)
{
using(var context=new MyCodeFirstDbContext(connection,false)
{
// ...
}
}
在以前的版本中,您无法传递需要某些不愉快体操的开放式连接,如here中所述
休眠还是Application Server JPA? - java我在生产中使用Glassfish,在测试中使用OpenEJB。我正在使用JPA 1.0。我使用的是Hibernate,但没有特定的Hibernate功能,只有标准的JPA。休眠在这个集合中是多余的,应该删除,对吗? java参考方案 OpenEJB和Glassfish均提供JPA实现。因此,要运行您的应用程序,您不需要休眠。但是,在某些特殊情况下,JPA实现…
如何以编程方式将ListView滚动到最后一个元素-Compact Framework - c#我正在使用Windows Mobile 6.1上的3.5 Compact Framework开发应用程序。我有一个ListView,添加项目时想自动滚动此列表。我能怎么做? 参考方案 listView.EnsureVisible(listView.Items.Count - 1);
Entity Framework DbEntityEntry>'不包含Where的定义 - c#此代码狙击手来自Adding CreatedDate to an entity using Entity Framework 5 Code First public override int SaveChanges() { DateTime saveTime = DateTime.Now; foreach (var entry in this.ChangeT…
LeetCode题解计算机为什么是基于二进制的?可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制
LeetCode题解统计城市的所有灯泡这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…