【发布时间】:2019-08-22 09:32:52
【问题描述】:
我正在使用实体框架从数据库中读取一些数据(读取成功)并且修改实体工作正常,但它不会将更改保存到数据库中。
该代码读取了 15 条记录,但并未在循环内遍历所有记录。它遍历列表的第一个元素并在 DbContext.SaveChanges() 处停止而不保存更改。
知道我的代码有什么问题吗?
public async Task LinkCardAsync(postcardContext DbContext)
{
HttpClient cons = new HttpClient();
cons.BaseAddress = new Uri("http://cbsswfint01:53303/");
cons.DefaultRequestHeaders.Accept.Clear();
cons.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
using (cons)
{
try
{
var cardsData = DbContext.MasterpassBulkLoad.Take(15).ToList();
foreach (var cardDetails in cardsData)
{
Console.WriteLine(cardDetails.Msisdn);
Console.WriteLine(cardDetails.Status == null);
HttpResponseMessage res = await cons.PostAsJsonAsync("api/Cardmanagement/CardLoad", cardDetails);
cardDetails.Status = (int)res.StatusCode;
Console.WriteLine("before save");
DbContext.SaveChanges();
Console.WriteLine("After Save");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException.Message);
_logger.LogError(ex.InnerException.StackTrace);
}
}
}
public void Run()
{
using (var DbContext = new postcardContext())
{
_cardLinkService.LinkCardAsync(DbContext);
}
Console.ReadKey();
}
【问题讨论】:
-
任何错误或异常?
-
没有错误也没有异常。它只是在第一次迭代时停止而不保存更改。
-
在 foreach 循环外调用
DbContext.SaveChanges(),如果仍未保存,请尝试 for 循环并使用cardsData.Get(index).Status = ...更新Status -
@GiddyNaya 我刚试过。代码仍然做同样的事情
-
@GiddyNaya,在循环外使用 DbContext.SaveChanges(),它会迭代我们的列表,但不会将更改保存到数据库
标签: c# database entity-framework .net-core