Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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# 在foreach中使用EF保存异步_C#_Entity Framework_Async Await - Fatal编程技术网

C# 在foreach中使用EF保存异步

C# 在foreach中使用EF保存异步,c#,entity-framework,async-await,C#,Entity Framework,Async Await,我想通过在Foreach循环中迭代来保存我的对象,并将结果返回给我的控制器 以下是控制器代码: public async Task<HttpResponseMessage> PostSubmissionFirm(JArray ParamList) { logger.Info(string.Format("---------- PricingController Information //// PostSubmissionFirm")); if (ParamLi

我想通过在Foreach循环中迭代来保存我的对象,并将结果返回给我的控制器

以下是控制器代码:

public async Task<HttpResponseMessage> PostSubmissionFirm(JArray ParamList)
{

    logger.Info(string.Format("----------  PricingController Information //// PostSubmissionFirm"));

    if (ParamList.Count > 0)
    {
        try
        {
            string xxx1 = null;
            string xxxx2 = null;
            string xxxx3 = null;
            string xxxx4 = null;

            Cccier Ci = new Cccier (ParamList);
            List<string> verify = Ci.VerifObject();
            if (verify.Count == 0)
            {


                var Premium =  Ci.calculate();


                HttpResponseMessage response = new HttpResponseMessage { StatusCode = HttpStatusCode.Created };
                return new HttpResponseMessage()
                {
                    StatusCode = HttpStatusCode.OK,
                    Content = new JsonContent(new { Premium = Premium, , DateExpire = DtExp.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture) })
                };
            }
            else
            {
                HttpError err = new HttpError(message);
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, err);
            }
        }
        catch (Exception e)
        {

        }
    }
}
公共异步任务后期提交公司(JArray ParamList)
{
logger.Info(string.Format(“------------PricingController Information/////PostSubmissionFirm”);
如果(ParamList.Count>0)
{
尝试
{
字符串xxx1=null;
字符串xx2=null;
字符串xx3=null;
字符串xx4=null;
Cccier Ci=新Cccier(参数列表);
List verify=Ci.VerifObject();
如果(verify.Count==0)
{
var溢价=Ci.calculate();
HttpResponseMessage response=新HttpResponseMessage{StatusCode=HttpStatusCode.Created};
返回新的HttpResponseMessage()
{
StatusCode=HttpStatusCode.OK,
Content=newjsoncontent(new{Premium=Premium,DateExpire=DtExp.ToString(“dd/MM/yyyy”,CultureInfo.InvariantCulture)})
};
}
其他的
{
HttpError err=新的HttpError(消息);
返回请求.CreateErrorResponse(HttpStatusCode.BadRequest,err);
}
}
捕获(例外e)
{
}
}
}
我调用的方法计算结果如下:

public async Task<string> calculate()
{
    int i = 1;
    foreach (var Contextli in qlimit)
    {

        Prem= Prm <= 1500 ? 1500 : Math.Round(Premium, 2);
        double Adnal1 = 100;
        double Adnal2 = Math.Round(Adnal1, 2);

        Submi SubRep = new Submi ();
        SubRep.IdSouSubmi  = 90;
        SubRep.IdPremm= i;
        SubRep.IdLi = Idl;
        SubRep.IdFran = idf;

        db.Submi.Add(SubRep);
        await db.SaveChangesAsync();            
    }

    string JSONString = string.Empty;
    JSONString = JsonConvert.SerializeObject(dt);
    return JSONString;
}
公共异步任务计算() { int i=1; foreach(qlimit中的var Contextli) {
Prem=Prm问题在于这条线:

var Premium = Ci.calculate();
如果没有使用
var
,您会发现
Premium
不是
字符串
,而是
任务

简易修复:

var Premium = await Ci.calculate();
注1:该行中没有任何内容遵循c#约定,这应该类似于

var premium = await Ci.CalculateAsync();

注2:
calculate
返回一个JSON字符串,您返回的是
JsonContent
,因此
premium
将被序列化两次。
calculate
应该返回实际对象。

看看您的内部异常(内部异常)。这可能是(几乎100%确定的)因为每次迭代都使用相同的DbContext,EF的DbContext不是线程安全的,所以我想这就是问题所在。但是如何使每次迭代都使用DbContext线程。首先,当错误消息不是英语时,很难获得帮助。请参阅:和。