【问题标题】:ServiceStack Ormlite transaction read after commit returns null sometimes提交后读取的 ServiceStack Ormlite 事务有时返回 null
【发布时间】:2015-09-25 09:32:18
【问题描述】:

我们在自动化测试期间遇到了一个奇怪的问题。有时我们会在提交后读取返回空值,即使数据按照应有的方式提交到数据库。

代码:

Repository.TransactionBegin();
        try
        {
            //Saves the HemUser
            Repository.SaveWithReferences(partyUserDb);
            // Save hpc-party relation with artifact
            Repository.SaveWithCredentials(hpcUserContext.ConvertTo<EconomyPartyRelationship>());
            Repository.SaveWithCredentials(hpcUserContext.ConvertTo<EconomyPartyRelHpcUser>());

            serviceCenterContexts.ForEach(a =>
            {
                Repository.SaveWithCredentials(a.ConvertTo<EconomyPartyRelationship>());
                Repository.SaveWithCredentials(a.ConvertTo<EconomyPartyRelServiceCenterUser>());
            });

            Repository.TransactionCommit();
            Console.WriteLine("leaving commit");
        }
        catch(Exception ex)
        {
            Repository.TransactionRollback();
            throw new HttpError(
                HttpStatusCode.PreconditionFailed,
                HemErrorCodes.FAILED_TO_CREATE_HEMUSER.ToString(),
                "Error creating HemUser. Ex: {0}".FormatWith(ex.Message));
        }
        Console.WriteLine(partyUserDb.Id);
        return FindUsersHelper.GetHpcContextUserById(dto.contextHpcId, partyUserDb.Id);

即使数据已提交并存在于数据库中,FindUsersHelper.GetHpcContextUserById 有时也会返回 null。如果我们等待它会起作用,但由于它应该是顺序的,所以如果提交成功,它不应该返回 null。

Repository.TransactionBegin() 和 Repository.TransactionCommit 的存储库代码仅在需要嵌套时处理事务的启动和停止,但这只是一个块,没有嵌套的事务语句。

我们尝试在没有存储库处理的显式事务中运行它,结果相同。我们在数据库上运行了一个分析器,我们看到在 select 语句之前完成了提交,但有时它仍然返回 null。如果我们设置一个断点(实际上和等待一样),当我们越过它时它就会起作用。

30 - 50% 的调用失败。

有什么想法吗?

/埃里克

【问题讨论】:

    标签: c# mysql transactions servicestack ormlite-servicestack


    【解决方案1】:

    我们找到了这个问题的答案。这是一个日期时间精度问题。除非你定义了你的精度,否则 Mysql 会四舍五入秒,无论它是多么小的时间部分。因此 2015-0828T22:02:34.1234 将向上舍入为 2015-0828T22:02:35,这对于验证时间戳而言是永恒的。

    /埃里克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      相关资源
      最近更新 更多