最近我們一直在保存數據對象的實體框架方面存在問題,即使我們沒有要求它。這裏有一個例子:實體框架保存數據對象時沒有明確地從你的代碼中調用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))
你可以發佈'ProductService'的代碼嗎?也許它會保留一個上下文實例,並保存來自不同動作甚至會話的數據。 – Menahem 2012-02-15 13:51:03
是的,顯然它確實在另一種方法上保存了對存儲庫的所有更改。這解釋了一切......謝謝。 – carlossless 2012-02-16 20:17:43