为什么在Entity Framework和SQL Server事务中得到不同的结果?

克拉托斯

在我的EF代码和SQL Server中,我尝试在不存在该用户的情况下插入用户数据,但是EF将其插入1000次,而在SQL Server中仅为1次。

EF代码:

static void Main(string[] args)
{
    using (var db = new MyDbContext())
    {
        for (var i = 0; i < 1000; i++)
        {
            var count = db.Users.Count(f => f.Name == "Test");
            if (count > 0) continue;

            db.Users.Add(new User
            {
                Name = "Test",
                Gender = "Male",
                Phone = "1111111111",
                CreateTime = DateTime.Now
            });
        }

        try
        {
            db.SaveChanges();
            //1000 rows effected
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    Console.ReadKey();
}

T-SQL代码:

declare @i int = 0
begin tran

while(@i < 1000)
    begin
        if not exists (select 1 from [dbo].[User] where Name = 'Test')
            insert into [dbo].[User] values('Test','Male','1111111111',getdate())
        set @i = @i + 1
    end

if(@@ERROR > 0)
    rollback tran
else
    commit tran

即使我使用事务处理包装了EF代码(但调用了SaveChanges一次),结果仍然与受影响的1000行相同。

但是,当我使用此代码时,结果与SQL Server中的结果相同:

using (var db = new MyDbContext())
{
    using (var trans = db.Database.BeginTransaction(ReadCommitted))
    {
        for (var i = 0; i < 1000; i++)
        {
            var count = db.Users.Count(f => f.Name == "Test");
            if (count > 0) continue;

            db.Users.Add(new User
            {
                Name = "Test",
                Gender = "Male",
                Phone = "1111111111",
                CreateTime = DateTime.Now
            });

            //1 row effected as sql does
            db.SaveChanges();
        }

        try
        {
            trans.Commit();
        }
        catch (Exception ex)
        {
            trans.Rollback();
            Console.WriteLine(ex.Message);
        }
    }
}

请告诉我为什么EF和SQL之间的事务不同

usr

db.Users.Add不插入。它用于在何时SaveChanges调用时插入(您认为是什么,SaveChanges或者如果不写出以前写的更改,为什么需要它?)。这就是为什么db.Users.Count(f => f.Name == "Test")总是返回零的原因

这与交易无关。

(顺便说一句,您可能应该使用Any代替Count这里)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么根据使用的功能会得到不同的结果?(SQL Server)

来自分类Dev

为什么在git bash(msysgit)和cygwin中的git中得到不同的结果?

来自分类Dev

为什么单引号(')和双引号(“)在python的json模块中得到不同的结果?

来自分类Dev

为什么在python中内置和定义的FFT会得到不同的结果?

来自分类Dev

为什么Java和Go的gzip会得到不同的结果?

来自分类Dev

为什么Entity Framework 6.x不缓存结果?

来自分类Dev

为什么Entity Framework为非常相似的代码创建不同的sql查询

来自分类Dev

拦截和操纵Entity Framework与SQL Server之间的SQL消息

来自分类Dev

为什么 SQL Server 中的 sp_helptext 返回不同的结果?

来自分类Dev

为什么此查询在Entity Framework中花费那么长时间,而在SQL中却如此之快?

来自分类Dev

为什么查询在Entity Framework中花费这么长时间,而在SQL中却如此之快呢?

来自分类Dev

使用Entity Framework 7和SQL Server 2008进行分页

来自分类Dev

使用Entity Framework和SQL Server进行多对多插入

来自分类Dev

为什么我从std :: fmod和std :: remainder得到了不同的结果

来自分类Dev

为什么我从ng-show =“!emptyArray”和ng-hide =“ emptyArray”得到不同的结果?

来自分类Dev

为什么在C ++和PHP SHA256哈希之间得到不同的结果?

来自分类Dev

为什么在使用cmd和git bash执行以下命令时得到不同的结果?

来自分类Dev

为什么我在Visual Studio和Qt上编译相同的代码,却得到不同的结果?

来自分类Dev

为什么在C ++和PHP SHA256哈希之间得到不同的结果?

来自分类Dev

为什么在使用for和while循环时会得到不同的结果?

来自分类Dev

为什么在使用cmd和git bash执行以下命令时得到不同的结果?

来自分类Dev

PCA:为什么我从princomp()和prcomp()得到的结果如此不同?

来自分类Dev

为什么TOAD和SQLPlus中的结果不同?

来自分类Dev

同时使用SQL Server Compact和SQL Server和Entity Framework

来自分类Dev

为什么LET语句的顺序在此Entity Framework查询中很重要?

来自分类Dev

为什么我的 (id == null) 在 Entity Framework MVC 中的更新方法上返回 null?

来自分类Dev

为什么我得到不同的结果?

来自分类Dev

为什么Excel和sql server的计算方式不同?

来自分类Dev

为什么Excel和sql server的计算方式不同?

Related 相关文章

  1. 1

    为什么根据使用的功能会得到不同的结果?(SQL Server)

  2. 2

    为什么在git bash(msysgit)和cygwin中的git中得到不同的结果?

  3. 3

    为什么单引号(')和双引号(“)在python的json模块中得到不同的结果?

  4. 4

    为什么在python中内置和定义的FFT会得到不同的结果?

  5. 5

    为什么Java和Go的gzip会得到不同的结果?

  6. 6

    为什么Entity Framework 6.x不缓存结果?

  7. 7

    为什么Entity Framework为非常相似的代码创建不同的sql查询

  8. 8

    拦截和操纵Entity Framework与SQL Server之间的SQL消息

  9. 9

    为什么 SQL Server 中的 sp_helptext 返回不同的结果?

  10. 10

    为什么此查询在Entity Framework中花费那么长时间,而在SQL中却如此之快?

  11. 11

    为什么查询在Entity Framework中花费这么长时间,而在SQL中却如此之快呢?

  12. 12

    使用Entity Framework 7和SQL Server 2008进行分页

  13. 13

    使用Entity Framework和SQL Server进行多对多插入

  14. 14

    为什么我从std :: fmod和std :: remainder得到了不同的结果

  15. 15

    为什么我从ng-show =“!emptyArray”和ng-hide =“ emptyArray”得到不同的结果?

  16. 16

    为什么在C ++和PHP SHA256哈希之间得到不同的结果?

  17. 17

    为什么在使用cmd和git bash执行以下命令时得到不同的结果?

  18. 18

    为什么我在Visual Studio和Qt上编译相同的代码,却得到不同的结果?

  19. 19

    为什么在C ++和PHP SHA256哈希之间得到不同的结果?

  20. 20

    为什么在使用for和while循环时会得到不同的结果?

  21. 21

    为什么在使用cmd和git bash执行以下命令时得到不同的结果?

  22. 22

    PCA:为什么我从princomp()和prcomp()得到的结果如此不同?

  23. 23

    为什么TOAD和SQLPlus中的结果不同?

  24. 24

    同时使用SQL Server Compact和SQL Server和Entity Framework

  25. 25

    为什么LET语句的顺序在此Entity Framework查询中很重要?

  26. 26

    为什么我的 (id == null) 在 Entity Framework MVC 中的更新方法上返回 null?

  27. 27

    为什么我得到不同的结果?

  28. 28

    为什么Excel和sql server的计算方式不同?

  29. 29

    为什么Excel和sql server的计算方式不同?

热门标签

归档