gpt4 book ai didi

c# - 为什么临时表在 nhibernate 中不起作用?

转载 作者:太空狗 更新时间:2023-10-30 01:24:26 26 4
gpt4 key购买 nike

我一直在尝试将临时表与 nhibernate 一起使用。

下面这段代码不起作用

query = @"CREATE TABLE [#Dataset_x]
([Name] [nvarchar](max) NULL,
[Value] [nvarchar](max) NULL )";
Session.CreateSQLQuery(query).SetTimeout(uploadExecQueryTimeout).ExecuteUpdate();

query = @"INSERT INTO [#Dataset_x] ([Name],[Value]) VALUES('Dataset','MyDataset')";
Session.CreateSQLQuery(query).SetTimeout(uploadExecQueryTimeout).ExecuteUpdate();

当我尝试运行第二个查询时出现对象无效错误(因为在我调用第二个查询之前创建的临时表已过期)。

但是,如果我在事务下添加上面的代码,如下所示,它就可以正常工作。

using (var transaction = Session.BeginTransaction())
{
query = @"CREATE TABLE [#Dataset_x]
([Name] [nvarchar](max) NULL,
[Value] [nvarchar](max) NULL )";

Session.CreateSQLQuery(query).SetTimeout(uploadExecQueryTimeout).ExecuteUpdate();

query = @"INSERT INTO [#Dataset_x] ([Name],[Value]) VALUES('Dataset','MyDataset')";
Session.CreateSQLQuery(query).SetTimeout(uploadExecQueryTimeout).ExecuteUpdate();
transaction.Commit();
}

谁能告诉我为什么在 nhibernate 中使用临时表需要事务?

注意:我在配置中使用的“current_session_context_class”值是 call

最佳答案

默认情况下,在 NHibernate 中,每个事务都会打开和关闭一个数据库连接。在第一个代码片段中,每个语句都在一个单独的隐式事务中执行,因此 NHibernate 在每个语句后关闭连接。在第二个代码片段中,连接仅在您结束事务时关闭,因此您的临时表在事务结束之前不会被删除。顺便说一句,在 NH 中使用隐式交易是 discouraged .

关于c# - 为什么临时表在 nhibernate 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9358992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com