EntityFramework SaveChange()方法不能更新的问题

在练习 《PRO MVC3 Professional》 第9章的实例的时候,碰到一个问题,之前可能看得不是很仔细,还没有注意到这个问题,直到今天添加上传图片的问题才发现不管自己怎么添加,图片都没法添加到数据库里去。后来发现,新加项目的时候是可以的,只是编辑更新的时候不行,郁闷了大半个下午,终于在网上找到了正确的解决方法,原来老美写的教科书也会有错误。。。看来还真是尽信书不如无书。

 

例子是书里的一个SportsStore实例,更新的方法在AdminController里

代码:

[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);
}

try
{
repository.SaveProduct(product);
}
catch (Exception ex)
{
throw ex;
}

TempData["message"] = string.Format("{0} has been saved", product.Name);
return RedirectToAction("Index");
}
else
{
return View(product);
}
}

 

这段代码没有问题,有问题的是下面这段代码:

 public class EFProductRepository : IProductsRespository
    {
        private EFDbContext context = new EFDbContext();

        public IQueryable<Product> Products
        {
            get { return context.Products; }
        }

        public void SaveProduct(Product product)
        {
            if (product.ProductID == 0)
            {
                context.Products.Add(product);
            }
            //else
           // {
           //    context.Entry(product).State = System.Data.EntityState.Modified;
          // }

            context.SaveChanges();
        }

        #region IProductsRespository 成员


        public void DeleteProduct(Product product)
        {
            context.Products.Remove(product);
            context.SaveChanges();
        }

        #endregion
    }

  书中的代码是没有注释的那几行的,因为Product没有改变,数据库因此没有更新。必须去掉注释行,告诉context,Product的内容已经发生改变,才能正常地更新到数据库里。

 

-------------------分割线----------------------------------

在研究这个问题的时候,不经意间发现了EntityFramework的几个新特性:

1.可以事先定义好实体类,上面例子中比如说是Product类,

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; }
}

  数据库可以事先不用创建,写好连接字符串,配置好配置文件

可以在Package Manger Console 窗口中,输入以下命令:

Update to Database

就可以让EntityFamework自动创建(更新)数据库文件,很强大!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值