前言

通过 “Entity Framework 6 学习笔记1 — 介绍和安装方法”文章我相信大家对EF的安装应该没什么问题了,整体安装还是比较简单的,只需要通过Nuge搜索EF然后安装就可以了,这也体现了微软一贯原则–“简单”。

安装完了我想很多朋友也着急想体验下EF的好处了吧,今天我就通过EF框架对增、删、改操作做一个简单示例。

创建表

这里我只是做示例所以就创建了一个表并且字段也很少。下面是sql语句,大家可以直接复制生成表结构。

 
  1. CREATE TABLE Book
 
  1. (
 
  1. Id INT IDENTITY(1,1) PRIMARY KEY NOT NULL ,
 
  1. Name NVARCHAR(1000),
 
  1. Price DECIMAL(18, 2)
 
  1. )

创建项目

对于创建项目的流程我这里就不赘述了,为方便操作数据我创建了一个WEB应用程序下图是我的解决方案结构

DAL类库用于放置EF文件。WEB应用程序方便操作数据,下面的3个页面我相信大家都懂的,注意这里和三层构架无关。

项目创建完成了现在开始创建EF,为方便操作我这里是使用的DB First来操作,对于什么是DB First 后面会有详细的介绍。

添加EF框架

1、在DAL类库上新建一个ADO.NET 实体数据模型,如果EF没有安装或者是安装失败的话这里是没有这项的,具体如何安装可以参考“Entity Framework 6 学习笔记1 — 介绍和安装方法”。‘

在DAL类库上点击右键—–添加—-新建项

2、选择模型内容,这里选择“从数据库生成”就可以了(下图)。

3、连接数据,点击“新建连接”设置数据库服务器名称和用户名、密码。

这里下面的名称设置成 DBEntities

4、选择需要使用的表,勾选需要使用到的表就可以

5、设置完成以后点击“完成”就可以了 。完成以后VS会自动打开表关系图,如果有主外键关系这里会很清晰的显示出来。至此EF框架已经添加成功了,下面我们看看EF在项目中的实际应用。

EF使用

注意:

1>在使用之前请在WEB中添加DAL类库的引用

2> 如果出现 :类型“System.Data.Entity.DbContext”在未被引用的程序集中定义。必须添加对程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089” 这个错误,请在WEB层上安装EntityFramework(具体安装方法 “Entity Framework 6 学习笔记1 — 介绍和安装方法”‘)

3> 在类前面添加引用:using DAL;

4>复制数据库连接字符串。把DAL层中App.config的数据库连接字符串复制到WEB层的web.config,放到 connectionStrings 节点下即可。不然会提示”在配置文件中找不到XXX的连接字符串“

1、添加数据

前台页面代码:

 
  1. <table>
 
  1. <tr>
 
  1. <td>书名:</td>
 
  1. <td><asp:TextBox ID="txtName" runat="server"></asp:TextBox></td>
 
  1. </tr>
 
  1. <tr>
 
  1. <td>价格:</td>
 
  1. <td><asp:TextBox ID="txtPrice" runat="server"></asp:TextBox></td>
 
  1. </tr>
 
  1. <tr>
 
  1. <td></td>
 
  1. <td>
 
  1. <asp:Button ID="BtnSave" runat="server" Text="保存" OnClick="BtnSave_Click" />
 
  1. </td>
 
  1. </tr>
 
  1. </table>

后台处理代码:

 
  1. protected void BtnSave_Click(object sender, EventArgs e)
 
  1. {
 
  1. DBEntities db = new DBEntities();
 
  1. Book model = new Book();
 
  1. model.Name = this.txtName.Text;
 
  1. model.Price = decimal.Parse(this.txtPrice.Text);
 
  1. db.Book.Add(model);
 
  1. db.SaveChanges();
 
  1. }

2、修改数据

前台页面和添加的一样这里不复制了。

后台代码:

 
  1. protected void Page_Load(object sender, EventArgs e)
 
  1. {
 
  1. if (!this.IsPostBack)
 
  1. {
 
  1. DBEntities db = new DBEntities();
 
  1. //传递过来修改的数据id
 
  1. int id = int.Parse(this.Request.QueryString["id"]);
 
  1. //通过ID获取对象。条件是lamda表达式,具体会在后面详细介绍。
 
  1. Book model = db.Book.SingleOrDefault(b => b.Id == id);
 
  1. this.txtName.Text = model.Name;
 
  1. this.txtPrice.Text = model.Price.ToString();
 
  1. }
 
  1. }
 
  1.  
 
  1. protected void BtnSave_Click(object sender, EventArgs e)
 
  1. {
 
  1. DBEntities db = new DBEntities();
 
  1. //传递过来修改的数据id
 
  1. int id =int.Parse( this.Request.QueryString["id"]);
 
  1. //通过ID获取对象。条件是lamda表达式,具体会在后面详细介绍。
 
  1. Book model = db.Book.SingleOrDefault(b => b.Id == id);
 
  1. model.Name = this.txtName.Text;
 
  1. model.Price = decimal.Parse(this.txtPrice.Text);
 
  1. db.SaveChanges();
 
  1. }

  3、显示列表数据和删除数据

前台页面:

 
  1. <table>
 
  1. <tr>
 
  1. <td>Id</td>
 
  1. <td>Name</td>
 
  1. <td>Price</td>
 
  1. <td>操作</td>
 
  1. </tr>
 
  1. <asp:Repeater ID="rptList" runat="server">
 
  1. <ItemTemplate>
 
  1. <tr>
 
  1. <td><%#Eval("id") %></td>
 
  1. <td><%#Eval("Name") %></td>
 
  1. <td><%#Eval("Price") %></td>
 
  1. <td>
 
  1. &nbsp; &nbsp; <a href="Update.aspx?id=<%#Eval("id") %>">修改</a>
 
  1. <asp:LinkButton ID="LbtnDeleteItem" CommandArgument='<%#Eval("id") %>'
 
  1. OnClick="LbtnDeleteItem_Click" runat="server">删除</asp:LinkButton>
 
  1. </td>
 
  1. </tr>
 
  1. </ItemTemplate>
 
  1. </asp:Repeater>
 
  1. </table>

后台代码:

 
  1. protected void Page_Load(object sender, EventArgs e)
 
  1. {
 
  1. if (!this.IsPostBack)
 
  1. {
 
  1. //绑定列表数据
 
  1. DBEntities db = new DBEntities();
 
  1. List<Book> list = db.Book.Where(b => true).ToList();
 
  1. this.rptList.DataSource = list;
 
  1. this.rptList.DataBind();
 
  1. }
 
  1. }
 
  1.  
 
  1. /// <summary>
 
  1. /// 删除操作
 
  1. /// </summary>
 
  1. /// <param name="sender"></param>
 
  1. /// <param name="e"></param>
 
  1. protected void LbtnDeleteItem_Click(object sender, EventArgs e)
 
  1. {
 
  1. DBEntities db = new DBEntities();
 
  1. LinkButton lbDeleteItem = sender as LinkButton;
 
  1. int id = int.Parse(lbDeleteItem.CommandArgument);
 
  1. Book model = db.Book.SingleOrDefault(b => b.Id == id);
 
  1. db.Book.Remove(model);
 
  1. db.SaveChanges();
 
  1. }

总结

到此简单的EF增、删、改、显示就已经完成了,通过上面的代码来看,EF使用起来还是挺方便的。EF将底层数据库操作做了很好的封装,使程序员更专注于上层业务的实现,而不需要过多重复的编写底层操作数据库。当然做了很好的封装使程序和数据库中间多出了一层,在使用性能比ADO.NET也就要稍差一些。为简化代码很多地方都没有做数据验证,在实际项目中这样做是不可取的。

以上只是个人的一点学习心得,如有不正之处望见谅。

Entity Framework 6 学习笔记2 — 增、删、改、显示简单代码示例的更多相关文章

  1. SQL Server 2012 学习笔记3 增查改删

    现在举例几个"增查改删"的语句 select * from UserInfor --查找所有字段 select username,UserId from UserInfor -- ...

  2. Entity Framework 6 学习笔记

    自引用 public class PictureCategory { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] publi ...

  3. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  4. 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序

    使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...

  5. EF(Entity Framework)通用DBHelper通用类,增删改查以及列表

    其中 通用类名:DBhelper 实体类:UserInfo 1 //新增 2 DBHelper<UserInfo> dbhelper = new DBHelper<UserInfo& ...

  6. StringBuilder修改字符串内容,增,删,改,插

    package seday01;/** * 字符串不变对象特性只针对字符串重用,并没有考虑修改操作的性能.因此String不适合频繁修改内容. * 若有频繁修改操作,使用StringBuilder来完 ...

  7. C# ADO.NET (sql语句连接方式)(增,删,改)

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  8. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  9. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

随机推荐

  1. 【Python56--爬取妹子图】

    爬取网站的思路 第一步:首先分析爬取网站的连接地址特性,发现翻页图片的时候连接:http://www.mmjpg.com/mm/1570  ,http://www.mmjpg.com/mm/1569, ...

  2. python --- 22 初始模块 random time collections functools

    一 .初始模块 1.从⼩到⼤的顺序: ⼀条代码 < 语句块 < 代码块(函数, 类) < 模块 2.引入模块的方式 ①   import   模块 ②   from   模块  im ...

  3. 差分数组|小a的轰炸游戏-牛客317E

    小a的轰炸游戏 题目链接:https://ac.nowcoder.com/acm/contest/317/E 思路  这题考查的是对差分数组原理和前缀和的理解. 四个数组分别记录朝着四个方向下放的个数 ...

  4. CF375D Tree and Queries(dsu on tree)

    思路 dsu on tree的板子,可惜人傻把 for(int i=fir[u];i;i=nxt[i]) 打成 for(int i=fir[u];i<=n;i++) 调了两个小时 这题要求维护& ...

  5. HDU 3333 Turing Tree(树状数组/主席树)

    题意 给定一个长度为 \(n​\) 的序列,\(m​\) 个查询,每次查询区间 \([L,R]​\) 范围内不同元素的和. \(1\leq T \leq 10\) \(1 \leq n\leq 300 ...

  6. 利用C#实现AOP常见的几种方法详解

    利用C#实现AOP常见的几种方法详解 AOP面向切面编程(Aspect Oriented Programming) 是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 下面这篇文章主要 ...

  7. Selenium Webdriver 自动化测试开发常见问题(C#版)

    转一篇文章,有修改,出处http://www.7dtest.com/site/blog-2880-203.html 1:Selenium中对浏览器的操作 首先生成一个Web对象 IWebDriver ...

  8. 2、iptables基本应用

    iptables:规则管理工具 添加.修改.删除.显示等: 规则和链有计数器: pkts:  由规则或链所匹配到的报文的个数: bytes:由规则或链匹配到的所有报文大小之和: iptables命令: ...

  9. SAP字段与表的对应关系

    SAP字段与表的对应关系   MASTER DATA-主数据 Customer Master KNA1                         Customer Basic Data KNB1 ...

  10. 【BZOJ】2815: [ZJOI2012]灾难

    简要题意: 给一个有向无环图,问每个节点删掉之后会导致多少个点不可达. 似乎以前拿来考过.... 我们定义一棵树,它满足对应点造成的灭绝值即为当点的子树大小-1 按照被捕食者--->捕食者的关系 ...