EF的使用

步骤:
(1)将EF添加到项目:在Model右击添加新建项
找到ADO.NET实体数据模型,接着。。。
(2)实现数据库的增删改查
 
 
 
查询
(因为在Model中已经添加EF实体了,所以就可以在Controller中进行有关的数据库操作)
<<controller>>
       //数据上下文对象
        OrderDBEntities db = new OrderDBEntities();
        public ActionResult Index() {
            //使用SQO(标准查询运算符),查询
            //实际返回的是IQueryable 接口的之类对象
            //IQueryable<Models.Customer> query = db.Customers.Where(d => d.Address == "111");
            //这样转有可能报异常 EnumerableQuery<Models.Customer> query = (EnumerableQuery<Models.Customer>)db.Customers.Where(d => d.Address == "111");
            //DbQuery 支持延迟加载,就是只有使用到数据的时候,才去查询数据库
            
            //DbQuery<Models.Customer> query = db.Customers.Where(d => d.Address == "111") as DbQuery<Models.Customer>;
            //List<Models.Customer> list = query.ToList();
            //也可以这样
            // List<Models.Customer> list = db.Customers.Where(d => d.Address == "111").ToList();
            //用第二种方式:使用Linq语句,该语法只是给程序员用的,.net编译器会在编译程序集的时候把它转化为SQO
            //IQueryable<Models.Customer> query = from d in db.Customers where d.Address == "111" select d;
            //List<Models.Customer> list = (from d in db.Customers where d.Address == "111" select d).ToList();
            List<Models.Customer> list = (from d in db.Customers select d).ToList();
           //使用ViewData将数据传给View
            ViewData["DataList"] = list;
            return View();
        }
 
<<View>>
<body>
    <table border="1">       
   <!--要取到数据就直接@对应的变量 这样就可以了(导入命名空间也是一个道理)-->
    @foreach (Customer a in ViewData["DataList"] as List<Customer>) 
    {
        <tr>
        <td>@a.Address</td>
        <td>@a.CustomerName</td>
        <td><a href="/home/del/@a.CustomerNo">删除</a>
            <a href="/home/modify/@a.CustomerNo">修改</a>
        </td>
        </tr>
    }     
     </table>
</body>
 
 
删除:
<<Controller>>
 
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);
            }
        }
<<View>>
删除哪有什么视图,成功失败页面不给出了
 
 
修改
在视图里面肯定又个修改连接,点击跳转到对应的页面,并将参数传递给对应的函数
<<View>>
<body>
    <table border="1">
        
   <!--要取到数据就直接@对应的变量 这样就可以了(导入命名空间也是一个道理)-->
    @foreach (Customer a in ViewData["DataList"] as List<Customer>) 
    {
        <tr>
        <td>@a.Address</td>
        <td>@a.CustomerName</td>
        <td><a href="/home/del/@a.CustomerNo">删除</a>
            <a href="/home/modify/@a.CustomerNo">修改</a>
        </td>
        </tr>
    }     
     </table>
</body>
//调用到控制器中的modify方法,并以表单的形式显示相应的页面
<<Controller>>
 
 
[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);
        }
<<View>>
 
 
<body>
    @using (Html.BeginForm("Modify", "Home", FormMethod.Post)) 
    {
        <table>
            <tr>
                <td colspan="2">修改</td>
            </tr>
            <tr>
                <td>标题:@Html.HiddenFor(a=>a.CustomerNo)</td>
                @*<td>@Html.TextBox("textName",(object)Model.CustomerNo)</td>*@
                <!--使用htmlHelper的强类型方法,直接从Model中根据CustoomerNo生成文本框-->
                <td>@Html.TextBoxFor(a =>a.CustomerNo)</td>
                <td>@Html.TextBoxFor(a =>a.CustomerName)</td>
                <td><input type="submit" value="确定修改" />@Html.ActionLink("返回","index","home")</td>
            </tr>
        </table>
    }
</body>
当用户点击修改的时候又将数据以Post方式发送给Home控制器中的Modify函数进行处理
<<Controller>>
 
[HttpPost] //表单提交过来的就调用这个方法
        public ActionResult Modify(Customer model)
        {
            try
            {
                //1,将实体对象加入EF对象容器中,并获取伪包装类对象
                DbEntityEntry<Customer> entry = db.Entry<Customer>(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 MVC4 使用EF实现数据库的增删改查的更多相关文章

  1. 使用EF实现数据库的增删改查

    EF的使用步骤:(1)将EF添加到项目:在Model右击添加新建项找到ADO.NET实体数据模型,接着…(2)实现数据库的增删改查查询(因为在Model中已经添加EF实体了,所以就可以在Control ...

  2. ThinkPHP实现对数据库的增删改查

    好久都没有更新博客了,之前老师布置的任务总算是现在可以说告一段落了,今天趁老师还没提出其他要求来更新一篇博客. 今天我想记录的是我之前做项目,自己所理解的ThinkPHP对数据库的增删改查. 首先要说 ...

  3. Android学习---数据库的增删改查(sqlite CRUD)

    上一篇文章介绍了sqlite数据库的创建,以及数据的访问,本文将主要介绍数据库的增删改查. 下面直接看代码: MyDBHelper.java(创建数据库,添加一列phone) package com. ...

  4. Android 系统API实现数据库的增删改查和SQLite3工具的使用

    在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...

  5. Android SQL语句实现数据库的增删改查

    本文介绍android中的数据库的增删改查 复习sql语法: * 增 insert into info (name,phone) values ('wuyudong','111') * 删 delet ...

  6. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  7. 【转载】通过JDBC对MySQL数据库的增删改查

    通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...

  8. 利用API方式进行数据库的增删改查

    /* 将数据库的增删改查单独放进一个包 */ package com.itheima28.sqlitedemo.dao; import java.util.ArrayList; import java ...

  9. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. Model元数据解析

    Model 元数据是针对数据类型的一种描述信息,主要用于控制数据类型本身及其成员属性在界面上的呈现方式,同时也为Model 绑定和验证提供必不可少的元数据信息.一个复杂数据类型通过属性的方式定义了一系 ...

  2. Flex 容器基本概念

    申明文章出处:http://www.adobe.com/cn/devnet/flex/articles/flex-containers-tips.html Flex 4 容器可以提供一套默认的布局:B ...

  3. allegro下快捷键设置[转贴]

    zz : http://yuandi6.blog.163.com/blog/static/207265185201210245435397/ 修改变量文件,设置自定义快捷键. Allegro可以通过修 ...

  4. 堆的 两种实现 (数组和STL)

    基本思想: 两种操作都跟树的深度成正比,所以复杂度  O(log(n)) ; push():在向堆中插入数值时,首先在堆的末尾插入该数值,然后不断向上提直到没有大小颠倒为止. pop(): 从堆中取出 ...

  5. 下拉刷新控件(3)系统自带的下拉刷新控件SwipeRefreshLayout(推荐*)

    1,简介 The SwipeRefreshLayout should be used whenever the user can refresh the contents of a view via ...

  6. Codeforces Round #209 (Div. 2)C

    刷了一页的WA  ..终于发现了 哪里错了 快速幂模板里一个变量t居然开得long  ... 虽然代码写的丑了点 但是是对的 那个该死的long 啊.. #include <iostream&g ...

  7. radio checked不起作用的原因

    <table id="approveTable"> <tr> <td> <input type="radio" nam ...

  8. linux下从源代码安装git

    之所以有这样的需求,是因为部分预安装的git版本太低,很多功能没有并且安全性存在问题. 比如git submodule add xxx@host:yyy.git必须在父repo的root目录安装,而新 ...

  9. HDU 1160 FatMouse's Speed

    半个下午,总算A过去了 毕竟水题 好歹是自己独立思考,debug,然后2A过的 我为人人的dp算法 题意: 为了支持你的观点,你需要从给的数据中找出尽量多的数据,说明老鼠越重速度越慢这一论点 本着“指 ...

  10. blocked because of many connection errors; unblock with 'mysqladmin flush-hosts;MySQL在远程访问时非常慢的解决方法;MySql链接慢的解决方法

     一:服务器异常:Host 'xx.xxx.xx.xxx' is blocked because of many connection errors; unblock with 'mysqladmin ...