C# 为什么在数据库中看不到10条记录?

C# 为什么在数据库中看不到10条记录?,c#,database,linq,jmeter,performance-testing,C#,Database,Linq,Jmeter,Performance Testing,我使用JMeter测试我的web应用程序。 我的测试用例是在数据库中添加一条记录。 然后我将线程用户数设置为20,这意味着它将模拟20个用户同时工作。 然后我运行测试用例。 但最后我发现系统并没有在数据库中创建20条记录,而是在数据库中创建了13条记录 我想知道为什么会这样? 是否可能是因为在我的web应用程序中,我没有在addrecords方法前面添加synchronized?我使用linq,如果两个用户同时向服务器发送创建记录的请求,会发生什么?只需创建一个记录或可以成功创建两个记录,还是未

我使用JMeter测试我的web应用程序。 我的测试用例是在数据库中添加一条记录。 然后我将线程用户数设置为20,这意味着它将模拟20个用户同时工作。 然后我运行测试用例。 但最后我发现系统并没有在数据库中创建20条记录,而是在数据库中创建了13条记录

我想知道为什么会这样? 是否可能是因为在我的web应用程序中,我没有在addrecords方法前面添加synchronized?我使用linq,如果两个用户同时向服务器发送创建记录的请求,会发生什么?只需创建一个记录或可以成功创建两个记录,还是未知

以下是在数据库中创建记录的示例代码:

       public int SaveEventGroup(int id, Models.Entities.EventGroup e, Nullable<int> setpublish)
    {
        try
        {
            Entities.EventGroup db;
            if (id == 0)
            {
                db = new Entities.EventGroup();
                db.CreatedBy = e.CreatedBy;
                db.CreateDatetime = DateTime.Now;
                db.Status = true;
            }
            else
            {
                db = this.GetEventGroup(id);
            }

            db.NameCN = e.NameCN;
            db.NameEN = e.NameEN;
            db.NameZH = e.NameZH;
            db.NamePT = e.NamePT;
            db.DisplayOrder = GetGroupMaxDisplayOrder() + 1;

            if (setpublish == null)
            {
                db.PublishStatus = false;
                db.PublishDatetime = null;
                db.UpdateDatetime = DateTime.Now;
                db.UpdatedBy = e.UpdatedBy;
            }

            if (id == 0)
                dataContext.AddToEventGroupSet(db);

            dataContext.SaveChanges();

            return db.Id;
        }
        catch (Exception ex)
        {
            log.Error(ex.Message, ex);
            throw ex;
        }
    }

数据库本身应该是ACID兼容的,所以在同步方面,我怀疑问题出在数据库上。如果您插入一条新记录,并且该记录由类似于自动递增整数的键控,则除非您告诉数据库根据该id进行更新,而不是插入一条新记录,否则数据库不会对其进行重击。但是,既然您没有编写SQL,谁知道您在指示数据库做什么呢


我建议把linq从方程中去掉,然后手工写出来。您正在测试的似乎是一个非常简单的upsert操作。

您可以发布在将数据插入数据库时运行的SQL语句。另一个驱动器通过发布。你好,回忆。发布你的SQL!不,我只使用Linq,没有SQL!那么,发布你的Linq代码怎么样?也发布一点调用Linq代码的代码,这样我们就可以看到上下文。如果你使用数据库,总会有一些SQL,打开SQL profiler来获取Linq生成的SQL,然后也发布SQL来创建表,那么我们可能会帮到你。是的,但是如果我手动操作这些测试用例,那么一切都没问题,我真的很想找到一个解决方案听起来你需要看看什么样的sql-teh-linq位正在生成