我一直在关注 Apress Pro ASP.NET MVC 3 Framework 书中的 SportsStore 示例项目,并尝试将这些概念应用于我的应用程序。困扰我的一个方面是,在示例中,我可以将图像添加到产品中并将其保存到数据库中,但是如果我编辑任何给定的产品,而不为它上传新图像,图像数据将被清除. 我希望能够编辑产品,但如果从 HTTP 帖子返回的图像数据为空,我希望实体框架保留现有的图像数据(和内容类型)。如果未上传新图像,如何命令 EF 不使用 null 更新此图像字段?
以下是 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 只保存某些字段而在数据库中保持其他字段不变?