MVC5+EF6

一、EF的增删改:

//新建用户

public ActionResult Create()

{

return View();

}

[HttpPost]

public ActionResult Create(SysUser sysUser)

{

db.SysUsers.Add(sysUser);

db.SaveChanges();

return RedirectToAction("Index");

}

修改用户:

//修改用户

public ActionResult Edit(int id)

{

SysUser sysUser = db.SysUsers.Find(id);

return View(sysUser);

}

[HttpPost]

public ActionResult Edit(SysUser sysUser)

{

db.Entry(sysUser).State = EntityState.Modified;

db.SaveChanges();

return RedirectToAction("Index");

}

删除用户:

//删除用户

public ActionResult Delete(int id)

{

SysUser sysUser = db.SysUsers.Find(id);

return View(sysUser);

}

[HttpPost, ActionName("Delete")]

public ActionResult DeleteConfirmed(int id)

{

SysUser sysUser = db.SysUsers.Find(id);

db.SysUsers.Remove(sysUser);

db.SaveChanges();

return RedirectToAction("Index");

}

NOTE

涉及到数据更新的地方都有两个同名的方法重载,一个用来显示[HttpGet],一个用来数据更新[HttpPost]

  1. 在右键方法名,生成相应的View

    每个View的顶部需要添加一个声明

    @model MVCDemo.Models.SysUser

  2. 如果是要用到foreach,每个View的顶部需要添加一个声明

    @model IEnumerable<MVCDemo.Models.SysUser>

二、EF封装成通用的增删改

namespace ZN.DAL{    public partial class BaseRepository<T> where T : class    {        //EF上下文的实例保证,线程内唯一        //实例化EF框架        //DataModelContainer db = new DataModelContainer();        //获取的实当前线程内部的上下文实例,而且保证了线程内上下文实例唯一        private DbContext db = EFContextFactory.GetCurrentDbContext();        //添加        public T AddEntities(T entity)        {            db.Entry<T>(entity).State = EntityState.Added;            //db.SaveChanges();            return entity;        }        //修改        public bool UpdateEntities(T entity)        {            db.Set<T>().Attach(entity);            db.Entry<T>(entity).State = EntityState.Modified;            //db.Entry<T>(entity).State= EntityState.Unchanged;            //return db.SaveChanges() > 0;            return true;        }

        //删除        public bool DeleteEntities(T entity)        {            db.Set<T>().Attach(entity);            db.Entry<T>(entity).State = EntityState.Deleted;            //return db.SaveChanges() > 0;            return true;        }        //查询        public IQueryable<T> LoadEntities(Func<T, bool> wherelambda)        {            return db.Set<T>().Where<T>(wherelambda).AsQueryable();        }    }}

三、常见问题

关于mvc5+EF里面的db.Entry(model).State = EntityState.Modified报错问题

最近在使用mvc5+EF的的时候用到了这句话

  db.Entry(model).State = EntityState.Modified

看上去很简单的修改数据,但是一直报错,说是key已经存在,不能修改。

搞了很久,突发奇想的把前面的代码

  var approvalModel = CurrentUser.ApplicationForms.SingleOrDefault(t => t.ID == id).Approval;

  if(approvalModel!=null){

    db.Entry(model).State = EntityState.Modified;

  }

改成  

if (db.Approvals.Any(t => t.ApprovalID == model.ApprovalID))
{
db.Entry(model).State = EntityState.Modified;
}

就不报错了。

是不是感觉很奇怪? 原因居然是approval已经取出来了,这是和数据库有关联,新的approval model虽然id一样但不是同一个对象,不能修改!

或者

var db = new CarLoanDBContext();就是换一个db对象

四、NOTE

针对上面这些代码,我们提一下其中用到的HtmlHelper, 主要有这么几个:

DisplayNameFor (model=>model.xxx):生成纯文本,显示xxx列名

DisplayFor (model=>model.xxx): 生成纯文本,显示xxx列的内容

LableFor : 生成一个Lable标签

EditorFor : 生成一个text类型的input

PasswordFor : 类似于EditorFor, 隐藏文本内容

ActionLink :生成一个<a>标签

BeginForm :生成一个表单

时间: 2024-08-01 23:35:26

MVC5+EF6的相关文章

构建ASP.NET MVC5+EF6+EasyUI 1.5+Unity4.x注入的后台管理系统(1)-前言与目录(持续更新中...)

前言: 起初写这个框架的时候,可以说在当时来说并不是很流行的设计模式,那是在2012年,面向对象的编程大家都很熟悉, 但是“注入.控制反转(DI,IOC,依赖注入).AOP切面编程”新兴名词 很多人并不知道特别是从事.NET开发的人,至少在当时 是这么样的,但是在今天它们却是非常流行的技术指标,很多大牛也承认,这是主流的开发模式,你们可以从招聘网的技术岗位看出. 我从事过MVC2.0到5.0的相关开发工作,见证了MVC的成熟演变过程,就像本框架一样,设计模式未曾改变,但是代码一直在重 构.我也坚

[实战]MVC5+EF6+MySql企业网盘实战(23)——文档列表

写在前面 上篇文章实现了图片列表,这篇文章实现文档列表将轻车熟路,因为逻辑基本相似,只是查询条件的不同.这里将txt,doc,docx,ppt,pptx,xls,xlsx的文件都归为文档列表中. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql企业

构建ASP.NET MVC5+EF6+EasyUI 1.4.3+Unity4.x注入的后台管理系统(51)-系统升级

系统很久没有更新内容了,最近花了2个月的时间每天一点点,从原有系统 MVC4+EF5+UNITY2.X+Quartz 2.0+easyui 1.3.4无缝接入 MVC5+EF6+Unity4.x+Quartz 2.3 +easyui 1.4.3. 并以easyui 1.4.3的gray皮肤为基础,升级10个扁平化皮肤 皮肤查看地址 更新的主要目的:新的MVC5特性和更好的性能 记录一下升级过程. 1.除了web层,其他全部提取. 2.新建解决方案.以前命名空间为App.现在更名为Apps. 3.

[实战]MVC5+EF6+MySql企业网盘实战(13)——思考

写在前面 从上面更新编辑文件夹,就一直在思考一个问题,之前做的编辑文件名已经文件夹名称,只是逻辑上的修改,但是保存的物理文件或者文件夹名称并没有进行修改,这样就导致一个问题,就是在文件或者文件夹修改名称后就会找不到物理文件,因为路径或者文件名错误了.所以就有了这篇文章的思考.当然,修改物理文件确实能实现,但是会频繁的操作io,性能会非常的差,如果一个文件非常大,你可想而知这种效率有多么底下. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+My

[实战]MVC5+EF6+MySql企业网盘实战(9)——编辑文件名

写在前面 上篇文章实现了文件的下载,本篇文章将实现编辑文件名的功能. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像 [Bootstrap]modal弹出框 [实战]MVC5+EF6+MySql企业网盘实战(5)——

MVC5+EF6 入门完整教程九

前一阵子临时有事,这篇文章发布间隔比较长,我们先回顾下之前的内容,每篇文章用一句话总结重点. 文章一 MVC核心概念简介,一个基本MVC项目结构 文章二 通过开发一个最基本的登录界面,介绍了如何从Controller中获取表单数据 文章三 EF的整个开发过程 文章四 EF基本的CRUD和常用的HtmlHelper 文章五 使用布局页(模板页)改造UI 文章六 分部视图(Partial View) 文章七 排序过滤分页 文章八 不丢失数据进行数据库结构升级 以上如果有不清楚的可以再回去看一下. 文

MVC5+EF6 入门完整教程

MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用 MVC5+EF6 入门完整教程10:多对多关联表更新&使用原生SQL@20150521 MVC5+EF6 入门完整教程9:多表数据加载@20150212 MVC5+EF6 入门完整教程8 :不丢失数据进行数据库结构升级 @20141215 MVC5+EF6 入门完整教程7 :排序过滤分页 @20141201 MVC5+EF6 入门完整教程6 :分部视图(Partial View) @20141117 MVC5+EF6 入门完整教程

MVC5 + EF6 简单示例

本文所使用的软件及环境: Visual Studio Ultimate 2013 (下载地址:http://www.visualstudio.com/downloads/download-visual-studio-vs); MVC5 + EF6 + .NET Framework 4.5 + LocalDB; Windows 7 x64 Professional 说明: 在EF (Entity Framework,以下简称EF6)框架下,操作数据的方式有三种:Database First, Mo

[实战]MVC5+EF6+MySql企业网盘实战(22)——图片列表

写在前面 实现逻辑是:单击图片节点,加载所有的当前用户之前上传的图片,分页,按时间倒序加载. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像 [Bootstrap]modal弹出框 [实战]MVC5+EF6+MySq

[实战]MVC5+EF6+MySql企业网盘实战(19)——BJUI和ztree

写在前面 上周在博客园看到一篇通用权限系统的文章,看到他那个UI不错,这里就研究了一下,将网盘的UI修改为他的那个,感兴趣的可以参考:http://b-jui.com/ 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册 [实战]MVC5+EF6+MySql企业网盘实战(3)——验证码 [实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像