博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EntityFramework SaveChange()方法不能更新的问题
阅读量:5364 次
发布时间:2019-06-15

本文共 2584 字,大约阅读时间需要 8 分钟。

在练习 《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
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自动创建(更新)数据库文件,很强大!!!

转载于:https://www.cnblogs.com/kfx2007/archive/2012/07/06/2579909.html

你可能感兴趣的文章
pandas的增删改查
查看>>
HDU 5933/思维
查看>>
字节对齐
查看>>
Design Tic-Tac Toe
查看>>
SQL中的去重操作
查看>>
uva 12097 - Pie(二分,4级)
查看>>
mongodb索引
查看>>
nginx源码学习资源(不断更新)
查看>>
【bzoj2882】工艺 后缀自动机+STL-map
查看>>
[redis] redis
查看>>
Linux的加密认证功能以及openssl详解
查看>>
[Tools] 使用XP远程登录Win8系统
查看>>
【RL-TCPnet网络教程】第38章 TFTP简单文件传输基础知识
查看>>
HDU- 2265 Encoding The Diary
查看>>
socket基本概念
查看>>
[第三方]SCNetworkReachability 获取网络状态控件使用方法
查看>>
在Windows上使用putty连接一台Linux主机
查看>>
Socket常见错误
查看>>
百度地图2.0API和3.0API。你想要的百度地图的这都有
查看>>
专业词汇
查看>>