Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这些行是否需要使用事务范围_C#_.net_Entity Framework - Fatal编程技术网

C# 这些行是否需要使用事务范围

C# 这些行是否需要使用事务范围,c#,.net,entity-framework,C#,.net,Entity Framework,我在Oracle中有两个表,其中一个是MTC,另一个是MtcExit private bool Verify(Mtcexittran mtcExitTran) { try { var mtcUnverified = _centraldbContext.Mtcunverifiedtran.FirstOrDefault(a => a.Transactionid.Equals(mtcExitTran.Transactionid)); if (m

我在Oracle中有两个表,其中一个是MTC,另一个是MtcExit

private bool Verify(Mtcexittran mtcExitTran)
{
    try
    {

        var mtcUnverified = _centraldbContext.Mtcunverifiedtran.FirstOrDefault(a => a.Transactionid.Equals(mtcExitTran.Transactionid));

        if (mtcUnverified == null)
        {
            return false;
        }

        _centraldbContext.Mtcunverifiedtran.Remove(mtcUnverified);

        _centraldbContext.Mtcexittran.Add(mtcExitTran);

        _centraldbContext.SaveChanges();

        return true;
    }

    catch (Exception ex)
    {
       
        return false;
    }

}

我的目标是从mtcunverified表中删除记录,并将其插入mtcexit表。我需要在此代码中使用transactionscope吗?是否有可能将记录从MTC验证表中删除,而不插入mtcexit中?如果无法将记录添加到mtcexit,我希望从mtcunverified表回滚删除操作。savechanges方法已在创建begin事务。因此,如果两个进程中有一个出现问题,我认为savechanges将回滚2进程。还是我必须使用transactionscope?感谢您的帮助。

在文档中,在下面,它说

默认情况下,如果数据库提供程序支持事务,则所有 单个SaveChanges调用中的更改将应用于事务中。 如果任何更改失败,则回滚事务并 所有更改都不会应用于数据库。这意味着 SaveChanges保证完全成功,或者离开 如果发生错误,则未修改数据库

对于大多数应用程序,此默认行为已足够。你应该 只有在满足应用程序要求的情况下才能手动控制事务 我认为有必要

因此,除非您已经做了一些事情来停止EF使用事务,否则默认设置应该可以


如果您想要更高级的事务控制,包括跨多个调用
SaveChanges
的事务,以及您可以回滚到的“保存点”,请参见文档的同一部分。

谢谢您的回答。据我所知,如果数据库无法将记录添加到mtcexit tran,则mtcexit tran的删除将自动回滚。我的项目负责人说我应该在这个过程中使用transactionscope。所以我要求确保在这个过程中不需要使用transactionscope。非常感谢。我链接到了“EF核心”的文档。通常情况下,旧版本的故事是相同的,但当您想做高级事情时,细节可能会有所不同。您使用的是哪个版本?事务范围可能不会有什么坏处,但它也可能是不必要的。除非您希望跨多个数据库或类似数据库进行一个事务。