实体框架SaveChanges被调用但它不起作用

时间:2016-09-19 12:24:51

标签: c# entity-framework

我有以下代码。当我跟踪代码时,我看到City不为空,它的值发生变化,然后调用SaveChanges,但不保存更改。这个项目中有大约数百个类似的代码,所有这些代码都有效。这可能是什么问题?

     using (Entities db = new Entities())
        {
        long id = (long)((string)data.data[i].id).ParseLong();
        City city = db.Cities.FirstOrDefault(c => c.Id == id);
        if (city != null)
            {
            city.FromLat = data.data[i].fromlat;
            city.ToLat = data.data[i].tolat;
            city.FromLng = data.data[i].fromlng;
            city.ToLng = data.data[i].tolng;
            if (city.FromLat > city.ToLat) More.Swap(ref city.ToLat, ref city.FromLat);
            if (city.FromLng > city.ToLng) More.Swap(ref city.FromLng, ref city.ToLng);
            db.SaveChanges();
            }
       }

4 个答案:

答案 0 :(得分:4)

您尚未提供模型,但在以下行中使用ref关键字:

if (city.FromLat > city.ToLat) More.Swap(ref city.ToLat, ref city.FromLat);
if (city.FromLng > city.ToLng) More.Swap(ref city.FromLng, ref city.ToLng);

清楚地表明FromLatToLatFromLngToLng成员是字段,因此未映射到数据库列。使它们属性并使用不同的代码进行交换(稍长一点,但有效):

if (city.FromLat > city.ToLat) { var temp = city.FromLat; city.FromLat = city.ToLat; city.ToLat = temp; };
if (city.FromLng > city.ToLng) { var temp = city.FromLng; city.FromLng = city.ToLng; city.ToLng = temp; };

答案 1 :(得分:0)

您没有将该项目添加到其集合(db.Cities.Add(city))。

如果您想更新实体:

db.Entry(city).State = EntityState.Modified;
db.SaveChanges();

答案 2 :(得分:0)

db.Entry(city).State = EntityState.Modified;

应该做的伎俩。

在savechanges之前添加此权限

答案 3 :(得分:0)

尝试通过

将状态设置为修改
db.Entry(city).State = System.Data.Entity.EntityState.Modified;

或者您可以手动设置已更改为已修改的每个字段。

相关问题