Entity Framework 6 学习笔记2 — 增、删、改、显示简单代码示例
前言
通过 “Entity Framework 6 学习笔记1 — 介绍和安装方法”文章我相信大家对EF的安装应该没什么问题了,整体安装还是比较简单的,只需要通过Nuge搜索EF然后安装就可以了,这也体现了微软一贯原则–“简单”。
安装完了我想很多朋友也着急想体验下EF的好处了吧,今天我就通过EF框架对增、删、改操作做一个简单示例。
创建表
这里我只是做示例所以就创建了一个表并且字段也很少。下面是sql语句,大家可以直接复制生成表结构。
CREATE TABLE Book |
|
( |
|
Id INT IDENTITY(1,1) PRIMARY KEY NOT NULL , |
|
Name NVARCHAR(1000), |
|
Price DECIMAL(18, 2) |
|
) |
创建项目
对于创建项目的流程我这里就不赘述了,为方便操作数据我创建了一个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、添加数据
前台页面代码:
<table> |
|
<tr> |
|
<td>书名:</td> |
|
<td><asp:TextBox ID="txtName" runat="server"></asp:TextBox></td> |
|
</tr> |
|
<tr> |
|
<td>价格:</td> |
|
<td><asp:TextBox ID="txtPrice" runat="server"></asp:TextBox></td> |
|
</tr> |
|
<tr> |
|
<td></td> |
|
<td> |
|
<asp:Button ID="BtnSave" runat="server" Text="保存" OnClick="BtnSave_Click" /> |
|
</td> |
|
</tr> |
|
</table> |
后台处理代码:
protected void BtnSave_Click(object sender, EventArgs e) |
|
{ |
|
DBEntities db = new DBEntities(); |
|
Book model = new Book(); |
|
model.Name = this.txtName.Text; |
|
model.Price = decimal.Parse(this.txtPrice.Text); |
|
db.Book.Add(model); |
|
db.SaveChanges(); |
|
} |
2、修改数据
前台页面和添加的一样这里不复制了。
后台代码:
protected void Page_Load(object sender, EventArgs e) |
|
{ |
|
if (!this.IsPostBack) |
|
{ |
|
DBEntities db = new DBEntities(); |
|
//传递过来修改的数据id |
|
int id = int.Parse(this.Request.QueryString["id"]); |
|
//通过ID获取对象。条件是lamda表达式,具体会在后面详细介绍。 |
|
Book model = db.Book.SingleOrDefault(b => b.Id == id); |
|
this.txtName.Text = model.Name; |
|
this.txtPrice.Text = model.Price.ToString(); |
|
} |
|
} |
|
|
|
protected void BtnSave_Click(object sender, EventArgs e) |
|
{ |
|
DBEntities db = new DBEntities(); |
|
//传递过来修改的数据id |
|
int id =int.Parse( this.Request.QueryString["id"]); |
|
//通过ID获取对象。条件是lamda表达式,具体会在后面详细介绍。 |
|
Book model = db.Book.SingleOrDefault(b => b.Id == id); |
|
model.Name = this.txtName.Text; |
|
model.Price = decimal.Parse(this.txtPrice.Text); |
|
db.SaveChanges(); |
|
} |
3、显示列表数据和删除数据
前台页面:
<table> |
|
<tr> |
|
<td>Id</td> |
|
<td>Name</td> |
|
<td>Price</td> |
|
<td>操作</td> |
|
</tr> |
|
<asp:Repeater ID="rptList" runat="server"> |
|
<ItemTemplate> |
|
<tr> |
|
<td><%#Eval("id") %></td> |
|
<td><%#Eval("Name") %></td> |
|
<td><%#Eval("Price") %></td> |
|
<td> |
|
<a href="Update.aspx?id=<%#Eval("id") %>">修改</a> |
|
<asp:LinkButton ID="LbtnDeleteItem" CommandArgument='<%#Eval("id") %>' |
|
OnClick="LbtnDeleteItem_Click" runat="server">删除</asp:LinkButton> |
|
</td> |
|
</tr> |
|
</ItemTemplate> |
|
</asp:Repeater> |
|
</table> |
后台代码:
protected void Page_Load(object sender, EventArgs e) |
|
{ |
|
if (!this.IsPostBack) |
|
{ |
|
//绑定列表数据 |
|
DBEntities db = new DBEntities(); |
|
List<Book> list = db.Book.Where(b => true).ToList(); |
|
this.rptList.DataSource = list; |
|
this.rptList.DataBind(); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 删除操作 |
|
/// </summary> |
|
/// <param name="sender"></param> |
|
/// <param name="e"></param> |
|
protected void LbtnDeleteItem_Click(object sender, EventArgs e) |
|
{ |
|
DBEntities db = new DBEntities(); |
|
LinkButton lbDeleteItem = sender as LinkButton; |
|
int id = int.Parse(lbDeleteItem.CommandArgument); |
|
Book model = db.Book.SingleOrDefault(b => b.Id == id); |
|
db.Book.Remove(model); |
|
db.SaveChanges(); |
|
} |
总结
到此简单的EF增、删、改、显示就已经完成了,通过上面的代码来看,EF使用起来还是挺方便的。EF将底层数据库操作做了很好的封装,使程序员更专注于上层业务的实现,而不需要过多重复的编写底层操作数据库。当然做了很好的封装使程序和数据库中间多出了一层,在使用性能比ADO.NET也就要稍差一些。为简化代码很多地方都没有做数据验证,在实际项目中这样做是不可取的。
以上只是个人的一点学习心得,如有不正之处望见谅。
Entity Framework 6 学习笔记2 — 增、删、改、显示简单代码示例的更多相关文章
- SQL Server 2012 学习笔记3 增查改删
现在举例几个"增查改删"的语句 select * from UserInfor --查找所有字段 select username,UserId from UserInfor -- ...
- Entity Framework 6 学习笔记
自引用 public class PictureCategory { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] publi ...
- django ajax增 删 改 查
具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...
- 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序
使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...
- EF(Entity Framework)通用DBHelper通用类,增删改查以及列表
其中 通用类名:DBhelper 实体类:UserInfo 1 //新增 2 DBHelper<UserInfo> dbhelper = new DBHelper<UserInfo& ...
- StringBuilder修改字符串内容,增,删,改,插
package seday01;/** * 字符串不变对象特性只针对字符串重用,并没有考虑修改操作的性能.因此String不适合频繁修改内容. * 若有频繁修改操作,使用StringBuilder来完 ...
- C# ADO.NET (sql语句连接方式)(增,删,改)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 好用的SQL TVP~~独家赠送[增-删-改-查]的例子
以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...
- iOS FMDB的使用(增,删,改,查,sqlite存取图片)
iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...
随机推荐
- Python带_的变量或函数命名
python中的标识符可以包含数字.字母和_,但必须以字母或者_开头,其中以_开头的命名一般具有特殊的意义. 前后均带有双下划线__的命名 一般用于特殊方法的命名,用来实现对象的一些行为或者功能,比如 ...
- ODAC(V9.5.15) 学习笔记(四)TCustomDADataSet(1)
1.SQL相关 名称 类型 说明 BaseSQL String 没有被AddWhere.SetOrderBy.FilterSQL等方法处理过的原始SQL语句 FinalSQL String 被AddW ...
- github帐户和仓库的创建
sign up is registration and sign in is logging in for "in" is to enter an existing account ...
- Custom Quality Profiles in SonarQube
https://medium.com/ltunes/custom-quality-profiles-in-sonarqube-part-1-8754348b9369 Creating Custom Q ...
- c#判断DatagridView表里是否有某个字段
if (DatagridView.Columns.Contains("旧ID")) { 有 ...
- 深度学习课程笔记(三)Backpropagation 反向传播算法
深度学习课程笔记(三)Backpropagation 反向传播算法 2017.10.06 材料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS1 ...
- Python 爬取 猫眼 top100 电影例子
一个Python 爬取猫眼top100的小栗子 import json import requests import re from multiprocessing import Pool #//进程 ...
- js 捕获浏览器后退事件
$(document).ready(function(e) { var counter = 0; if (window.history &&am ...
- Jmeter 老司机带你一小时学会Jmeter
Jmeter的安装 官网下载地址:http://jmeter.apache.org/download_jmeter.cgi 作为Java应用,是需要JDK环境的,因此需要下载安装JAVA,并且作必 ...
- 配置多个版本的jdk
引言: 由于公司有多个项目都需要我开发,而各个项目所依赖的jdk版本又不同,因此需要配置多个jdk; 配置方法: 什么也不说了,直接上图: 然后在其他需要制定Tomcat的地方直接引用JAVA_HOM ...