2012-02-15 16 views
0

最近我們一直在保存數據對象的實體框架方面存在問題,即使我們沒有要求它。這裏有一個例子:實體框架保存數據對象時沒有明確地從你的代碼中調用save()

public virtual ActionResult Index() 
{ 
    var productListViewModel = new ProductListViewModel 
           { 
            Products = ProductService.GetAllProducts() 
           }; 

    // temporarily override file url to display images 
    foreach (var product in productListViewModel.Products) 
    { 
     product.ImageFileName = FileUploadService.GetProductThumbnailUrl(product); 
    } 

    return View(productListViewModel); 
} 

的GetProductThumbnailUrl()函數返回我們做出來的靜態URL +映像文件名稱的格式化路徑字符串。然而,由於顯而易見的原因,我們不想保存這條路徑,只是暫時將其用於視圖。

但是,這裏有一個奇怪的部分:有時所有這些產品被保存到數據庫,這給我們不能使用的格式不正確的URL。

所以我現在的問題是什麼可能導致這種情況? (我使用DEP注射團結。)


而至於修復我只是不更改數據對象的任何東西,而是使用一個渲染動作:

public ActionResult GetProductUrl(DomainModel.Product p) 
{ 
    return Content(FileUploadService.GetProductThumbnailUrl(p)); 
} 

而且在視圖中:

@Html.Action(MVC.Admin.Product.GetProductUrl(p)) 
+1

你可以發佈'ProductService'的代碼嗎?也許它會保留一個上下文實例,並保存來自不同動作甚至會話的數據。 – Menahem 2012-02-15 13:51:03

+0

是的,顯然它確實在另一種方法上保存了對存儲庫的所有更改。這解釋了一切......謝謝。 – carlossless 2012-02-16 20:17:43

回答

3

在那裏的某個地方,您正在調用針對您從中拉取的上下文的提交更改。這是獲得挽回的唯一途徑。

+0

確實如此,另一輪搜索導致我成爲罪魁禍首。它調用所有上下文更改以從服務中的另一種方法保存。謝謝! – carlossless 2012-02-16 20:18:40

相關問題