#c# #asp.net #asp.net-mvc #entity-framework #dbcontext
#c# #asp.net #asp.net-mvc #entity-framework #dbcontext
Вопрос:
Я пытаюсь добавить экземпляр модели, заполненный значениями, в базу данных, но он показывает мне ошибку
«Операция не может быть завершена, поскольку DbContext был удален».
Вот мой код
private async void timerHandlerFixerIO(object sender, EventArgs e)
{
string html = string.Empty;
string url = @"http://api.fixer.io/latest";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.AutomaticDecompression = DecompressionMethods.GZip;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
html = reader.ReadToEnd();
}
Debug.WriteLine(html);
FixerIO FixerIOInstance = new FixerIO();
FixerIOInstance.rates = new rates();
FixerIOInstance = JsonConvert.DeserializeObject<FixerIO>(html);
db.FixerIOs.Add(FixerIOInstance);
await db.SaveChangesAsync();
}
При выполнении этой строки появляется всплывающее окно исключения ошибки
db.FixerIOs.Add(FixerIOInstance);
и мое DbContext
объявление вне timerHandlerFixerIO
метода, например
private ApplicationDbContext db = new ApplicationDbContext();
Комментарии:
1. Вместо того, чтобы добавлять примечание о вашем стиле написания, почему бы просто не исправить его на обычный английский?
2. где
db
объявлено?3. Его внутренний контроллер
4. Где-то еще удаляет контекст БД перед
timerHandlerFixerIO
выполнением.5. @AliJamal, я думаю
timerHandlerFixerIO
, запускается таймером или чем-то еще, контекст БД в это время недоступен. Если мое предположение верно, вы не должны помещать таймер внутри контроллера.
Ответ №1:
Вы можете DbContext
снова использовать этот способ
using(var db = new ApplicationDbContext())
{
db.FixerIOs.Add(FixerIOInstance);
await db.SaveChangesAsync();
}
Комментарии:
1. Да, это сработало, спасибо, теперь значения сохраняются в базе данных при каждой итерации тика таймера Большое вам спасибо, я бы сам не понял этого, спасибо