Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自加载实体后,实体可能已被修改或删除。使用db.Entry(entity.State=EntityState.Modified时;SaveChanges()_C#_Asp.net_Entity Framework - Fatal编程技术网

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();
At
db.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);}