为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Entity Framework .SqlQuery 以便它可以同时被多个客户端使用?

如何使用 Entity Framework .SqlQuery 以便它可以同时被多个客户端使用?

C#
侃侃无极 2022-01-16 18:13:06
在我的 ASP.NET MVC 应用程序中,我有一个方法,它有一个执行存储过程的循环。要循环的项目数可以是 10,000 或更多。当一个客户端尝试一次运行报告时,这一切都很好,但是当多个客户端尝试运行报告时,它会锁定所有客户端并将错误排除在外。创建的错误是:SqlParameter 已包含在另一个 SqlParameterCollection 中。该错误是在我尝试使用“结果”的行上生成的,然后端点对所有用户保持锁定状态,直到重新启动应用程序。我以前从未遇到过这个问题,这也是我之前第一次使用实体框架生成大型报告。我怎样才能避免这个错误?这是代码:foreach (var item in upcList){    try    {        if (!string.IsNullOrEmpty(item[0]))        {            string upc;            if (DropCheckDigit != true)            {                upc = Helpers.upc.formatBRDUpc(item[0]);            }            else            {                upc = Helpers.upc.formatBRDUpcDropCheckDigit(item[0]);            }            var results = BRDataDb.Database.SqlQuery<ProductMovementItem>("EXEC MoC_MoCHub_GetItemData @p0, @p1", upc, DataSource).FirstOrDefault();            if (results != null)            {                if (results.BaseQty != 0 && results.BasePrice != 0)                {                    results.Margin = (((results.BasePrice / results.BaseQty) - results.cost) / (results.BasePrice / results.BaseQty)) * 100;                    if (results.Margin != null)                    {                        results.Margin = decimal.Round(decimal.Parse(results.Margin.ToString()), 2);                    }                }                PMIList.Add(results);                progressCounter += 1;                Helpers.SharedFunctions.SendProgress("Processing...", progressCounter, (upcList.Count * 2), connectionId);            }        }    }    catch (Exception ex)    {        Elmah.ErrorSignal.FromCurrentContext().Raise(ex);    }}
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

你试过处置吗


foreach (var item in upcList)

    {

        try

        {

            if (!string.IsNullOrEmpty(item[0]))

            {

                string upc;


                if (DropCheckDigit != true)

                {

                    upc = Helpers.upc.formatBRDUpc(item[0]);

                }

                else

                {

                    upc = Helpers.upc.formatBRDUpcDropCheckDigit(item[0]);

                }


                using (BRDataDb db = new BRDataDb())

                {

                    var results = db.Database.SqlQuery<ProductMovementItem>("EXEC MoC_MoCHub_GetItemData @p0, @p1", upc, DataSource).FirstOrDefault();


                    if (results != null)

                    {

                        if (results.BaseQty != 0 && results.BasePrice != 0)

                        {

                            results.Margin = (((results.BasePrice / results.BaseQty) - results.cost) / (results.BasePrice / results.BaseQty)) * 100;


                            if (results.Margin != null)

                            {

                                results.Margin = decimal.Round(decimal.Parse(results.Margin.ToString()), 2);

                            }

                        }


                        PMIList.Add(results);

                        progressCounter += 1;

                        Helpers.SharedFunctions.SendProgress("Processing...", progressCounter, (upcList.Count * 2), connectionId);

                    }

                }

            }

        }

        catch (Exception ex)

        {

            Elmah.ErrorSignal.FromCurrentContext().Raise(ex);

        }

    }


查看完整回答
反对 回复 2022-01-16
  • 1 回答
  • 0 关注
  • 157 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号