我很想知道这是如何运作的。 如果我的A类使用
创建数据上下文dbContext = new S_ERP_DBEntities();
然后,我的A类调用B类中一个也需要数据上下文的方法,所以我再次做
dbContext = new S_ERP_DBEntities();
是否打开与DB的多重连接或只打开一个?
答案 0 :(得分:0)
在任何地方使用int index = Parser::lhs[rule_number];
int name_index = Parser::non_terminal_index[index];
char[] _name = Parser::name[name_index];
都会在每次使用时创建新实例。
有许多不同的理论和情况,您可能需要与数据库建立多个连接,或者您可能希望使用new
对象,即整个应用程序中只有一个实例。这一切都归结为特定于应用程序的要求以及您要实现的对象处理类型。
希望这能清除基本理念。
答案 1 :(得分:0)
是否打开与DB的多重连接或只打开一个?
取决于您如何使用它,这取决于您对打开多个连接的定义。这不是一个简单明了的问题。
同时打开多个连接(在新代码中最常见)的唯一方法之一是使用一些异步命令,如:
using (var dbContext1 = new S_ERP_DBEntities())
using (var dbContext2 = new S_ERP_DBEntities())
{
var cars = await dbcontext1.Cars.ToListAsync();
var cars = await dbcontext2.Cars.ToListAsync();
}
在此示例中,两个连接很可能会打开,然后两个连接都将关闭。否则,大多数代码同步运行,因此每次执行sql的EF请求都将打开和关闭,然后执行下一行代码。
它更复杂,因为应用程序池有一个或多个connection pools。如果连接字符串相同,则可以在多个上下文中使用相同的连接(即使在不同的请求或不同的上下文中)。