2012-02-15 1 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 + ImageFileNameで作られたフォーマットされたパス文字列で私たちを返します。ただし、明示的な理由から、このパスを保存せずに一時的にビューに使用することは望ましくありません。

しかし、ここでは奇妙な部分があります。これらの製品はすべてデータベースに保存されることがあり、私たちが使用できない不正な形式のURLを提供しています。

私の質問は今これを引き起こす可能性がありますか? (私はDEPのために団結を使用しています注入。)


し、修正のためとして、私はちょうどレンダリングされたアクションデータオブジェクトに何かを変更し、代わりに使用しないでください。

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

をとビューでは:

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

あなたは 'ProductService'のコードを投稿できますか?多分コンテキストインスタンスを保持し、異なるアクションやセッションからのデータを保存するかもしれません。 – Menahem

+0

はい、明らかに、別の方法でリポジトリへのすべての変更を保存しました。それはすべてを説明する...ありがとう。 – carlossless

答えて

3

どこかに、あなたが引っ張っているコンテキストに対してコミットの変更を呼び出しています。これが救われる唯一の方法です。

+0

それは本当です、もう一つの調査のラウンドは私を犯人に導いた。すべてのコンテキスト変更をサービス内の別のメソッドから保存するよう呼びかけていました。ありがとうございました! – carlossless

関連する問題