C# 自加载实体后,实体可能已被修改或删除。使用db.Entry(entity.State=EntityState.Modified时;SaveChanges()
使用以下代码在数据库行中循环并在每次迭代中编辑数据时C# 自加载实体后,实体可能已被修改或删除。使用db.Entry(entity.State=EntityState.Modified时;SaveChanges(),c#,asp.net,entity-framework,C#,Asp.net,Entity Framework,使用以下代码在数据库行中循环并在每次迭代中编辑数据时 var entities = db.entities.Where(l => l.id > 28181 && l.id < 28425 && l.Geometry == null).ToList(); HttpClient client = new HttpClient(); HttpResponseMessage response = new HttpResp
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();
var entities=db.entities.Where(l=>l.id>28181&&l.id<28425&&l.Geometry==null);
HttpClient=新的HttpClient();
HttpResponseMessage response=新的HttpResponseMessage();
foreach(实体中的模型实体)
{
字符串区域=entity.address+“”+entity.city+“”+国家;
变量地址=字符串。格式(“https://maps.googleapis.com/maps/api/geocode/json?key=AIzaSyArOWaWq_xXjAm68DlFFFqoxK7Z_ggYk9E&address=“+gebied);
response=wait client.GetAsync(地址);
var bekijk=response.StatusCode;
if(响应。IsSuccessStatusCode)
{
var data=response.Content.ReadAsStringAsync();
var jObject=Newtonsoft.Json.Linq.jObject.Parse(data.Result);
字符串状态=作业对象[“状态”]。ToObject();
如果(状态=“正常”)
{
var geometryLocation=jObject[“结果”][0][“几何体”][“位置”];
字符串lat=geometryLocation[“lat”].ToObject();
字符串lon=geometryLocation[“lng”].ToObject();
entity.Geometry=System.Data.entity.Spatial.DbGeometry.FromText(“点(“+lat+”“+lon+”));
entity.Latitude=Convert.ToDecimal(lat.Replace(“.”,“,”);
entity.Longitude=Convert.ToDecimal(lon.Replace('.',');
db.Entry(entity.State=EntityState.Modified;
}
}
}
db.SaveChanges();
Atdb.SaveChanges()代码>发生错误。即
Store update、insert或delete语句影响了意外的行数(0)。自加载实体后,实体可能已被修改或删除
我已经尝试了我在stackoverflow上看到的解决方案,但没有任何效果。有人有什么线索吗?提前感谢。您是否尝试手动更新实体
使用包管理器控制台:
PM> Add-Migration MyMigration
...
PM> Update-Database
这可能会有帮助:分配值并用不同的方法保存,以某种方式修复它。
有人能告诉我为什么吗
public async void FirstMethod()
{
var entities = db.entities.ToList();
HttpClient client = new HttpClient();
HttpResponseMessage response = new HttpResponseMessage();
foreach (var entity in entities)
{
string area= entity.address + " " + entity.city + " " + land;
var address = String.Format("https://maps.googleapis.com/maps/api/geocode/json?key=AIzaSyArOWaWq_xXjAm68DlFFFqoxK7Z_ggYk9E&address=" + area);
response = await client.GetAsync(address);
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>();
SecondMethod(lat+" "+lon ,entity);
}
}
}
}
public void SecondMethod(string preometry, model entity)
{
entity.Geometry = System.Data.Entity.Spatial.DbGeometry.FromText("POINT(" + preometry + ")");
string[] latLon = preometry.Split(' ');
entity.Latitude = Decimal.Parse(latLon[0].Replace(".", ","));
entity.Longitude = Decimal.Parse(latLon[1].Replace(".", ","));
db.Entry(entity).State = EntityState.Modified;
db.SaveChanges();
}
public异步void FirstMethod()
{
var entities=db.entities.ToList();
HttpClient=新的HttpClient();
HttpResponseMessage response=新的HttpResponseMessage();
foreach(实体中的var实体)
{
字符串区域=entity.address+“”+entity.city+“”+land;
变量地址=字符串。格式(“https://maps.googleapis.com/maps/api/geocode/json?key=AIzaSyArOWaWq_xXjAm68DlFFFqoxK7Z_ggYk9E&address=“+面积);
response=wait client.GetAsync(地址);
if(响应。IsSuccessStatusCode)
{
var data=response.Content.ReadAsStringAsync();
var jObject=Newtonsoft.Json.Linq.jObject.Parse(data.Result);
字符串状态=作业对象[“状态”]。ToObject();
如果(状态=“正常”)
{
var geometryLocation=jObject[“结果”][0][“几何体”][“位置”];
字符串lat=geometryLocation[“lat”].ToObject();
字符串lon=geometryLocation[“lng”].ToObject();
第二种方法(lat+“”+lon,实体);
}
}
}
}
public void SecondMethod(字符串预计量、模型实体)
{
entity.Geometry=System.Data.entity.Spatial.DbGeometry.FromText(“点(“+preometry+”));
字符串[]latLon=预计量。拆分(“”);
entity.Latitude=Decimal.Parse(latLon[0]。替换(“.”,“,”);
entity.Longitude=Decimal.Parse(latLon[1]。替换(“.”,“,”);
db.Entry(entity.State=EntityState.Modified;
db.SaveChanges();
}
该错误通常发生在实体框架无法找到具有相同id的实体时,以更新您的代码未编译。这行foreach(kandidaten-kandidaat-in-kandidaten)
应该改为:foreach(Entity-Entity-in-entities)
?我相信您是Adil Mammadov,但当我在循环中设置断点时,我看到id就在那里。那么为什么找不到PK呢?您是否在上下文中设置了全局“AsNoTracking()”等?您的错误是因为上下文跟踪的实体未检测到任何更改,因此更新不会影响任何实体。id是此类型的唯一键吗?我们的项目是DB first。从DB更新模型并再次运行,但仍然没有区别尝试保存每个记录的更改,并查看它是否发生在特定的记录上或与所有记录一起。此请求的结果是返回数据?看看这是否有帮助:if(!ModelState.IsValid){return BadRequest(ModelState);}