Asp.net MVC4 使用EF实现数据库的增删改查

EF的使用
步骤:
(1)将EF添加到项目:在Model右击添加新建项
找到ADO.NET实体数据模型,接着。。。

(2)实现数据库的增删改查


查询
(因为在Model中已经添加EF实体了,所以就可以在Controller中进行有关的数据库操作)
<>
       //数据上下文对象
        OrderDBEntities db = new OrderDBEntities();
        public ActionResult Index() {
            //使用SQO(标准查询运算符),查询
            //实际返回的是IQueryable 接口的之类对象
            //IQueryable query = db.Customers.Where(d => d.Address == "111");
            //这样转有可能报异常 EnumerableQuery query = (EnumerableQuery)db.Customers.Where(d => d.Address == "111");
            //DbQuery 支持延迟加载,就是只有使用到数据的时候,才去查询数据库
            
            //DbQuery query = db.Customers.Where(d => d.Address == "111") as DbQuery;
            //List list = query.ToList();
            //也可以这样
            // List list = db.Customers.Where(d => d.Address == "111").ToList();
            //用第二种方式:使用Linq语句,该语法只是给程序员用的,.net编译器会在编译程序集的时候把它转化为SQO
            //IQueryable query = from d in db.Customers where d.Address == "111" select d;
            //List list = (from d in db.Customers where d.Address == "111" select d).ToList();
            List list = (from d in db.Customers select d).ToList();
           //使用ViewData将数据传给View
            ViewData["DataList"] = list;
            return View();

        }

<>

          
   
    @foreach (Customer a in ViewData["DataList"] as List
    {
       
       
       
       
       
    }     
     
@a.Address @a.CustomerName 删除
            修改
       




删除:

<>

public ActionResult Del(string id) //这个id是通过超链接带过来的
        {
            try
            {
                //需要一个实体对象参数
                //db.Customers.Remove(new Customer() {CustomerNo = id });
                //1,创建要删除的对象
                Customer modelDel = new Customer() { CustomerNo = id };
                //2,将对象添加到EF管理容器中
                db.Customers.Attach(modelDel);
                //3,修改对象的包装类对象标识为删除状态
                db.Customers.Remove(modelDel);
                //4,更新到数据库
                db.SaveChanges();
                //5,更新成功,则命令流浪器重定向 到 /Home/Index 方法
                return RedirectToAction("Index", "Home");
            }
            catch (Exception )
            {   
                //指定对应跳转的视图Test下的Test.cshtml文件
               return RedirectToAction("Test", "Test");
               //return Content("删除失败" + ex.Message);
            }
        }
<>
删除哪有什么视图,成功失败页面不给出了


修改
在视图里面肯定又个修改连接,点击跳转到对应的页面,并将参数传递给对应的函数
<>

   
        
   
    @foreach (Customer a in ViewData["DataList"] as List
    {
       
       
       
       
       
    }     
     
@a.Address @a.CustomerName 删除
            修改
       


//调用到控制器中的modify方法,并以表单的形式显示相应的页面
<>


[HttpGet] //加上这个 只要是超链接发送过来的就调用这个
        public ActionResult Modify(string id)
        {
            Customer art = (from d in db.Customers where d.Address == "111" select d).FirstOrDefault();
            //将数据传递给视图:用ViewBag viewData 使用view的构造函数
            return View(art);
        }
<>



    @using (Html.BeginForm("Modify", "Home", FormMethod.Post)) 
    {
       
           
               
           
           
               
                @**@
               
               
               
               
           
       
修改
标题:@Html.HiddenFor(a=>a.CustomerNo) @Html.TextBox("textName",(object)Model.CustomerNo) @Html.TextBoxFor(a =>a.CustomerNo) @Html.TextBoxFor(a =>a.CustomerName) @Html.ActionLink("返回","index","home")

    }

当用户点击修改的时候又将数据以Post方式发送给Home控制器中的Modify函数进行处理
<>
  [HttpPost] //表单提交过来的就调用这个方法
        public ActionResult Modify(Customer model)
        {
            try
            {
                //1,将实体对象加入EF对象容器中,并获取伪包装类对象
                DbEntityEntry entry = db.Entry(model);
                //2,将伪包装类对象的状态设置为unchanged
                entry.State = System.Data.EntityState.Unchanged;
                //3,设置被改变的属性
                entry.Property(a => a.CustomerName).IsModified = true;
                //4,提交到数据库 完成修改
                db.SaveChanges();
                return RedirectToAction("Index", "Home");
            }
            catch (Exception)
            {
                return RedirectToAction("Test", "Test");
            }
        }


补充:MVC中页面之间的跳转是通过MapRouter
代码如下
routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
 );

你可能感兴趣的:(Asp.net)