簡體   English   中英

實體框架SaveChanges被調用,但不起作用

[英]Entity Framework SaveChanges is called but its not working

我有以下代碼。 當我跟蹤代碼時,我看到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();
            }
       }

您尚未提供模型,但在以下幾行中使用了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; };

您沒有將項目添加到其集合( db.Cities.Add(city) )。

如果要更新實體:

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

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

應該做到的。

在savechanges之前添加此權限

嘗試通過以下方式將狀態設置為修改

db.Entry(city).State = System.Data.Entity.EntityState.Modified;

或者,您可以手動設置已更改為已修改的每個字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM