【发布时间】:2016-10-05 19:57:32
【问题描述】:
当使用以下代码遍历数据库行并在每次迭代中编辑数据时
var entities = db.entities.Where(l => l.id > 28181 && l.id < 28425 && l.Geometry == null).ToList();
HttpClient client = new HttpClient();
HttpResponseMessage response = new HttpResponseMessage();
foreach (model entity in entities)
{
string area = entity.address + " " + entity.city + " " + country;
var address = String.Format("https://maps.googleapis.com/maps/api/geocode/json?key=AIzaSyArOWaWq_xXjAm68DlFFFqoxK7Z_ggYk9E&address=" + gebied);
response = await client.GetAsync(address);
var bekijk = response.StatusCode;
if (response.IsSuccessStatusCode)
{
var data = response.Content.ReadAsStringAsync();
var jObject = Newtonsoft.Json.Linq.JObject.Parse(data.Result);
string status = jObject["status"].ToObject<string>();
if (status== "OK")
{
var geometryLocation = jObject["results"][0]["geometry"]["location"];
string lat = geometryLocation["lat"].ToObject<string>();
string lon = geometryLocation["lng"].ToObject<string>();
entity.Geometry = System.Data.Entity.Spatial.DbGeometry.FromText("POINT(" + lat + " " + lon + ")");
entity.Latitude = Convert.ToDecimal(lat.Replace('.', ','));
entity.Longitude = Convert.ToDecimal(lon.Replace('.', ','));
db.Entry(entity).State = EntityState.Modified;
}
}
}
db.SaveChanges();
db.SaveChanges(); 发生错误。即
存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体后,实体可能已被修改或删除。
我已经尝试过在 stackoverflow 上看到的解决方案,但没有任何效果。有没有人有任何线索?提前致谢。
【问题讨论】:
-
Entity Framework 找不到要更新的
id相同的实体时通常会出现该错误 -
您的代码无法编译。这条线
foreach (kandidaten kandidaat in kandidaten)应该改为:foreach (Entity entity in entities)吗? -
我相信你 Adil Mammadov,但是当我在循环中设置断点时,我看到 id 在那里。那怎么没有找到PK呢?
-
您是否在上下文中设置了全局“AsNoTracking()”等?您的错误是因为上下文跟踪的实体没有检测到任何更改,因此更新不会影响任何实体。
-
id是这种类型的唯一键吗?
标签: c# asp.net entity-framework