私はApressProASP.NET MVC 3 FrameworkブックのSportsStoreサンプルプロジェクトに従い、その概念をアプリケーションに適用しようとしています。私を悩ませている領域の1つは、サンプルで画像を製品に追加してデータベースに保存できることですが、新しい画像をアップロードせずに特定の製品を編集すると、画像データが消去されます。商品を編集できるようにしたいのですが、HTTP POSTから返された画像データがnullの場合、Entity Frameworkに既存の画像データ(およびコンテンツタイプ)を保持させたいと考えています。新しい画像がアップロードされていない場合、この画像フィールドをnullで更新しないようにEFに指示するにはどうすればよいですか?
SportsStoreサンプルの編集コードは次のとおりです。
[HttpPost]
public ActionResult Edit(Product product, HttpPostedFileBase image)
{
if (ModelState.IsValid)
{
if(image != null)
{
product.ImageMimeType = image.ContentType;
product.ImageData = new byte[image.ContentLength];
image.InputStream.Read(product.ImageData, 0, image.ContentLength);
}
_repository.SaveProduct(product);
TempData["message"] = string.Format("{0} has been saved", product.Name);
return RedirectToAction("Index");
}
else
{
return View(product);
}
}
編集:Rondelの場合-Productクラスの定義は次のとおりです
namespace SportsStore.Domain.Entities
{
public class Product
{
[HiddenInput(DisplayValue=false)]
public int ProductId { get; set; }
[Required(ErrorMessage = "Please enter a product name")]
public string Name { get; set; }
[Required(ErrorMessage = "Please enter a description")]
[DataType(DataType.MultilineText)]
public string Description { get; set; }
[Required]
[Range(0.01, double.MaxValue, ErrorMessage = "Please enter a positive price")]
public decimal Price { get; set; }
[Required(ErrorMessage = "Please specify a category")]
public string Category { get; set; }
public byte[] ImageData { get; set; }
[HiddenInput(DisplayValue = false)]
public string ImageMimeType { get; set; }
}
}
編集EFに特定のフィールドのみを保存させ、他のフィールドはデータベースにそのままにしておくにはどうすればよいですか?