сохранить асинхронный с EF в foreach - PullRequest
0 голосов
/ 25 августа 2018

Я хочу сохранить свой объект путем итерации в цикле 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)
        {

        }
    }
}

И метод расчета, который я вызываю, и в результате:

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;
}

но я получаю сообщение об ошибке сразу после первой итерации цикла foreach:

Ошибка: 500 Внутренняя ошибка сервера {"Message": "Скорее всего, вы не можете получить информацию о транзакции за последние четыре месяца. Получите дополнительную информацию, обращайтесь к международному исключению". }

1 Ответ

0 голосов
/ 25 августа 2018

Проблема в следующей строке:

var Premium = Ci.calculate();

Если бы вы не использовали var, вы бы увидели, что Premium - это не string, а Task<string>.

Простое исправление:

var Premium = await Ci.calculate();

Примечание 1: ничто в этой строке не следует соглашениям c #, хотя это должно быть что-то вроде

var premium = await Ci.CalculateAsync();

Примечание 2: calculateвозвращает строку JSON, и вы возвращаете JsonContent, поэтому premium будет сериализован дважды.calculate должен вернуть реальный объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...