我有以下代码。当我跟踪代码时,我看到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();
}
}
答案 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);
清楚地表明FromLat
,ToLat
,FromLng
和ToLng
成员是字段,因此未映射到数据库列。使它们属性并使用不同的代码进行交换(稍长一点,但有效):
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;
或者您可以手动设置已更改为已修改的每个字段。