C# 在foreach中使用EF保存异步
我想通过在Foreach循环中迭代来保存我的对象,并将结果返回给我的控制器 以下是控制器代码: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
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线程。首先,当错误消息不是英语时,很难获得帮助。请参阅:和。