2013-05-06 56 views
0

我想寫一個EF命令,如果它在SaveChanges()上得到一個異常,它將修復它的一個字段。請參考下面的代碼示例:在對象上下文中修改一個EF實體

 model.IMAGES.AddObject(new IMAGES 
      { 
       IMAGE = imageByteArray, 
       IMAGE_NAME = pNum + "_OTHER.JPG", 
       VIEWPOINT_ID = 279, 
       ID_NO = ++id, 
      }); 
     try 
     { 
      model.SaveChanges(); 
      Trace.WriteLine("Saved: " + pNum + "_OTHER.JPG"); 
     } 
     catch 
     { 
      model.REF_PART_IMAGES.Last().VIEWPOINT_ID = 272; 
      model.SaveChanges(); 
      Trace.WriteLine("Saved: " + pNum + "_OTHER.JPG");     
     } 

呼叫到最後一個()拋出「LINQ實體無法識別方法‘PullPics.IMAGES LastIMAGES’方法,和這種方法不能被翻譯成表達店

有沒有人有關於如何訪問新創建的對象來修改它的想法?

+0

爲什麼不檢查上次()調用VIEWPOINT_ID的SaveChanges之前()?一般來說,基於try/catch的條件不好:http://programmers.stackexchange.com/questions/107723/arguments-for-or-against-using-try-catch-as-logical-operators – 2013-05-06 19:38:13

+0

但是,如果你的在SaveChanges()之前移動它之後錯誤仍然存​​在我們需要查看模型的所有相關部分。 – 2013-05-06 19:39:36

+0

您在引發異常的Last()方法中有一些查詢。您不能在查詢表達式中使用自定義方法。如果結果集不是很大,請在將項目存儲到內存之前(例如toArray)。 – maxlego 2013-05-06 19:45:56

回答

0

我想通了,我不希望最後(),我只是想保持原來的對象的引用和更新:

var image = new IMAGES 
     { 
      IMAGE = imageByteArray, 
      IMAGE_NAME = pNum + "_OTHER.JPG", 
      VIEWPOINT_ID = 279, 
      ID_NO = ++id, 
     }; 

    model.IMAGES.AddObject(image); 
    try 
    { 
     model.SaveChanges(); 
     Trace.WriteLine("Saved: " + pNum + "_OTHER.JPG"); 
    } 
    catch 
    { 
     image.VIEWPOINT_ID = 272; 
     model.SaveChanges(); 
     Trace.WriteLine("Saved: " + pNum + "_OTHER.JPG");     
    }