2017-08-22 23 views
0

我正在尝试使用下面的Linq更新行,但由于某种原因它没有进行更新。我已经GOOGLE了,并可以保证我捍卫我的表中的主键。下面是我的代码:在LINQ中编辑行

 public static ReturnedSavedSearchStatus editSavedSearches(Eteach.Objects.SavedSearch savedSearch) 
    { 
     ReturnedSavedSearchStatus rtn = new ReturnedSavedSearchStatus(); 
     ET_TBL_TalentpoolSavedSearch dbsavedSearch = new ET_TBL_TalentpoolSavedSearch(); 
     dbsavedSearch = AutoMapper.Mapper.Map<ET_TBL_TalentpoolSavedSearch>(savedSearch); 

     if (dbsavedSearch.id < 0) 
     { 
      rtn.status = false; 
      rtn.description = "Error: Id cannot be less then 0"; 

     } 
     else 
     { 

      using (EteachDatabaseDataContext ctx = new EteachDatabaseDataContext()) 
      { 

       var result = ctx.ET_TBL_TalentpoolSavedSearches.SingleOrDefault(s => s.id == dbsavedSearch.id); 

       if (result != null) 
       { 
        result = dbsavedSearch; 
       // ctx.ET_TBL_TalentpoolSavedSearches.InsertOnSubmit(dbsavedSearch); 
        ctx.SubmitChanges(); 

        rtn.status = true; 
        rtn.description = "Saved Search saved"; 
       } 
      } 
     } 

     return rtn; 
    } 
+0

你是否尝试过单步执行代码,看看它甚至达到了'ctx.SubmitChanges();'? –

+0

是的,它确实达到了ctx.SubmitChanges(); – user8427641

+0

你需要在调用'SubmitChanges'之前修改/映射结果的属性 - 你不能指定整个实体。 – Oliver

回答

0

我觉得你的问题是在分配整个对象,这并没有改变对象的内容,它改变了对象的内存地址,而不是(你正在失去的对象),你应该更新每个属性单独这样

result.Property1 = dbsavedSearch.Property1; 
result.Property2 = dbsavedSearch.Property2; 
... 
... 
ctx.SubmitChanges(); 

希望这可以帮助你