gpt4 book ai didi

.NET TransactionScope 超时问题/EF

转载 作者:行者123 更新时间:2023-12-05 01:37:45 25 4
gpt4 key购买 nike

我有一个 WinForms 项目,我必须在其中读取大量 xml 文件(2gb+)并将数据存储在 MSSQL 数据库中。
10 分钟后,我收到错误消息:
“与当前连接关联的事务已完成但尚未释放。必须先释放事务,然后才能使用该连接执行 SQL 语句。”

我认为这必须是超时问题,因此我执行了以下操作:

我我使用的代码:

using (tran = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions()
{
IsolationLevel = System.Transactions.IsolationLevel.Serializable,
Timeout = TimeSpan.Zero //TimeSpan.FromHours(2)
}))
{
/*Here I read out xml, and use EF to write to DB*/
}

我在 App.config 中添加了:
<system.transactions>
<defaultSettings timeout="2:00:00"/>
</system.transactions>

我在 machine.config 中添加了:
<system.transactions>
<machineSettings maxTimeout="2:00:00"/>
</system.transactions>

在 MSSQL 中,我将远程查询超时设置为 0

仍然会发生此超时。我究竟做错了什么?

最佳答案

我首先要指出,在 EF 的单个事务中进行如此大规模的上传是错误的。此类操作应在 EF 之外完成,例如批量插入临时表并合并到主数据集。

SSIS(SQL Server 集成服务)也有可能出现这种情况。

EF 不是用于数据迁移或同步的工具,它在这种情况下的性能是悲惨的。

关于.NET TransactionScope 超时问题/EF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7726667/

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