gpt4 book ai didi

c# - 我应该在以下代码的哪一行提交我的工作单元?

转载 作者:太空狗 更新时间:2023-10-29 17:57:46 26 4
gpt4 key购买 nike

我在交易中有以下代码。我不确定我应该在哪里/何时提交我的工作单元。

我故意没有提到我使用的是什么类型的 Respoistory - 例如。 Linq-To-Sql、Entity Framework 4、NHibernate 等

如果有人知道在哪里,他们能否解释一下他们为什么说,在哪里? (我试图通过示例来理解模式,而不是仅仅让我的代码工作)。

这是我得到的:-

using
(
TransactionScope transactionScope =
new TransactionScope
(
TransactionScopeOption.RequiresNew,
new TransactionOptions
{ IsolationLevel = IsolationLevel.ReadUncommitted }
)
)
{
_logEntryRepository.InsertOrUpdate(logEntry);
//_unitOfWork.Commit(); // Here, commit #1 ?

// Now, if this log entry was a NewConnection or an LostConnection,
// then we need to make sure we update the ConnectedClients.
if (logEntry.EventType == EventType.NewConnection)
{
_connectedClientRepository.Insert(
new ConnectedClient { LogEntryId = logEntry.LogEntryId });
//_unitOfWork.Commit(); // Here, commit #2 ?
}

// A (PB) BanKick does _NOT_ register a lost connection,
// so we need to make sure we handle those scenario's as a LostConnection.
if (logEntry.EventType == EventType.LostConnection ||
logEntry.EventType == EventType.BanKick)
{
_connectedClientRepository.Delete(
logEntry.ClientName, logEntry.ClientIpAndPort);
//_unitOfWork.Commit(); // Here, commit #3 ?
}

_unitOfWork.Commit(); // Here, commit #4 ?
transactionScope.Complete();
}

最佳答案

回答这个问题的一个很好的起点是企业架构模式 (http://martinfowler.com/eaaCatalog/unitOfWork.html) 中工作单元的定义:

Maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems.

工作单元的边界由业务事务的边界定义——在这种情况下,它与数据库事务的边界同义(但在跨越多个请求的长时间运行的业务事务的情况下,可能情况并非如此)。

从上面的定义倒推,根据我对所示代码段的理解,您应该在业务事务结束时提交工作单元(#4)。

顺便说一句,您的数据库事务范围应始终小于 UoW 的范围(即 tx 范围位于对 UoW.Begin() 和 UoW.Commit() 的调用之间)。如果您的 UoW 跨越多个数据库事务,您将在其中一个内部事务失败时使用补偿事务来“重新平衡”UoW。在这种情况下,特别是如果您的 UoW 在 UoW.Begin() 和 UoW.Commit() 处创建自己的数据库事务边界,我会删除事务范围,因为这只会给代码添加不必要的噪音。

关于c# - 我应该在以下代码的哪一行提交我的工作单元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2500305/

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