Entity framework第二篇.docx
- 文档编号:6658205
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:9
- 大小:541.23KB
Entity framework第二篇.docx
《Entity framework第二篇.docx》由会员分享,可在线阅读,更多相关《Entity framework第二篇.docx(9页珍藏版)》请在冰豆网上搜索。
Entityframework第二篇
ASP.NET4.0与EntityFramework4-第二篇-使用EntityFramework进行CRUD操作
本文将向你介绍如何使用EntiityFramework对SQLSever中的数据进行增删改查(CRUD)操作。
文中使用的数据库是上一篇文章《采用Model-First开发方式创建数据库》创建的。
当然你还需要下载VisualStudio2010来打开上一篇文章的项目文件。
项目文件的下载链接:
点击下载。
步骤1:
修改第一篇文章中的数据库
在第一篇里,我们使用EF4创建了2个实体。
它们分别是UserAccount和Address,每一个实体都有一个名为Id的主键和多个字段。
但是在那篇文章中,没有告诉大家如何将主键设置为Identity字段,设置为Identity字段的好处是主键可以自增。
1打开第一篇文章使用的项目文件。
2.双击SolutionExplorer的OrderDB.edmx文件,将会看到EntityFramework设计器。
3.点击UserAccount的Id字段,查看它的属性(Alt+Enter)。
4.将StoreGeneratedPattern的设置为Identity,Address实体做同样的操作。
5.实体更新了,数据库也要同步更新。
右击视图设计器选择"GenerateDatabaseFromModel",这个时候VS会提示你是否覆盖OrderDB.edmx.sql文件,点击"Yes"。
6.覆盖后,VS会自动打开OrderDB.edmx.sql文件,右键弹出菜单中选择“ExecuteSQL”。
这时VS会提示你输入数据数连接信息,输入后点击“connect”就可以了。
步骤2:
创建Web表单
下面将在程序中创建一个表单,用来管理UserAccount数据。
1.在项目文件上右键,选择Add->NewItem..
2.选择WebForm模板,将名字改为Users.aspx,点“Add”。
3.在User.aspx的div之间添加如下代码:
SelectAUser: | DropDownListrunat=serverID="ddlUsers"AutoPostBack="True"> DropDownList> |
FirstName: | TextBoxrunat="server"ID="txtFirstName"> TextBox> |
LastName: | TextBoxrunat="server"ID="txtLastName"> TextBox> |
Inserted: | Labelrunat="server"ID="lblInserted"> Label> |
Updated: | Labelrunat="server"ID="lblUpdated"> Label> |
Buttonrunat=serverID="btnSave"Text="Save"/> ButtonID="btnDelete"runat="server"Text="Delete"/> 这里采用的table的对form进行了简单的布局。 转到Design视图你会看到表单的样子如下: 步骤3: 将数据加载到DropDownList中 要完成的是在页面加载时,将UserAccount的Name和Id数据加载到DropDownList中。 当选择特定项时,加载更加详细的信息。 1.双击Degsin视图(F7),在后台代码中添加Page_Load事件。 2.处理Page_Load事件的代码如下: protectedvoidPage_Load(objectsender,EventArgse) { if(! IsPostBack) { LoadUserDropDownList(); } } 3.Page_Load方法中的LoadUserDropDownList方法代码如下: privatevoidLoadUserDropDownList() { using(OrderDBContainerdb=newOrderDBContainer()) { ddlUsers.DataSource=fromuindb.UserAccounts orderbyu.LastName selectnew{Name=u.LastName+","+u.FirstName,Id=u.Id}; ddlUsers.DataTextField="Name"; ddlUsers.DataValueField="Id"; ddlUsers.DataBind(); ddlUsers.Items.Insert(0,newListItem("CreateNewUser","")); } } 该方法创建了一个OrderDBContainer类的实例,这个类在创建OrderDB.edmx自动生成了。 它的功能和ADO.NET中的connction类似,我们使用OrderDBContainer连接数据库,操作数据库中的对象。 这里的DropDownList的数据源是一个Linq查询。 当然,EF将会把它翻译为SQL语句。 Linq就像是SQL倒过来写,它From语句在前,而SELECT语句在后。 本例中,我将所有的UserAccount数据查询了出来,并且按LastName排序。 同时选择了Name和Id列,Name是FirstName和LastName用逗号拼接而成。 DataTextField属性设置为Name,DataValueField设置为Id,这些都是在Linq查询中创建的。 设置完成后,就是绑定了。 绑定时,才真正开始调用数据库查询的操作。 最后给DropDownList添加一项“CrateNewUser.”,这项是用来区分更新和添加操作的。 现在数据库中还没有任何数据,DropDownList中只有"CreteNewUser"一项。 如果你打开了SQLServerProfiler,会看到EF4生成的SQL语句如下: SELECT [Project1].[Id]AS[Id], [Project1].[C1]AS[C1] FROM(SELECT [Extent1].[Id]AS[Id], [Extent1].[LastName]AS[LastName], [Extent1].[LastName]+N','+[Extent1].[FirstName]AS[C1] FROM[dbo].[UserAccounts]AS[Extent1] )AS[Project1] ORDERBY[Project1].[LastName]ASC 步骤4: 添加和更新数据 下面将向你介绍如何添加和更新表中的数据。 1.转到设计视图,双击Save按钮,创建该按钮的点击事件。 2.处理点击事件的代码如下: using(OrderDBContainerdb=newOrderDBContainer()) { UserAccountuserAccount=newUserAccount(); userAccount.FirstName=txtFirstName.Text; userAccount.LastName=txtLastName.Text; userAccount.AuditFields.UpdateDate=DateTime.Now; if(ddlUsers.SelectedItem.Value=="") { //Adding userAccount.AuditFields.InsertDate=DateTime.Now; db.UserAccounts.AddObject(userAccount); } else { //Updating userAccount.Id=Convert.ToInt32(ddlUsers.SelectedValue); userAccount.AuditFields.InsertDate=Convert.ToDateTime(lblInserted.Text); db.UserAccounts.Attach(userAccount); db.ObjectStateManager.ChangeObjectState(userAccount,System.Data.EntityState.Modified); } db.SaveChanges(); lblInserted.Text=userAccount.AuditFields.InsertDate.ToString(); lblUpdated.Text=userAccount.AuditFields.UpdateDate.ToString(); //Reloadthedropdownlist LoadUserDropDownList(); //Selecttheonetheuserjustsaved. ddlUsers.Items.FindByValue(userAccount.Id.ToString()).Selected=true; } } 代码首先创建OrderDBContainer对象,再创建UserAccount对象,用输入的值填充UserAccount对象属性。 更新日期用系统当前时间,接着判断是更新操作还是添加操作了。 最后就是更新DropDownList的值并选中刚刚操作的UserAccout。 这里的db.SaveChanges()最后实际上是在数据库中执行添加或更新语句。 步骤5.查询数据 下面是实现当用户选择某一个DropDownList项时,显示详细信息的功能。 1.双击视图设计器中的DropDownList,这时会创建DropDownList的SelectedIndexChanged方法。 2.编写SelectedIndexChanged方法的代码如下: if(ddlUsers.SelectedValue=="") { txtFirstName.Text=""; txtLastName.Text=""; lblInserted.Text=""; lblUpdated.Text=""; } else { //GettheuserfromtheDB using(OrderDBContainerdb=newOrderDBContainer()) { intuserAccountId=Convert.ToInt32(ddlUsers.SelectedValue); List whereu.Id==userAccountId selectu).ToList(); if(userAccounts.Count()>0) { UserAccountuserAccount=userAccounts[0]; txtFirstName.Text=userAccount.FirstName; txtLastName.Text=userAccount.LastName; lblInserted.Text=userAccount.AuditFields.InsertDate.ToString(); lblUpdated.Text=userAccount.AuditFields.UpdateDate.ToString(); } else { //Error: didn'tfinduser. txtFirstName.Text=""; txtLastName.Text=""; lblInserted.Text=""; lblUpdated.Text=""; } } } 代码根据DropDownList选择的Id,用Linq从数据库中查询一条数据并且显示出来。 步骤6: 删除数据 最后就是删除数据的功能了。 1.转到视图设计器,双击“Delete”按钮。 2.添加如下代码: if(ddlUsers.SelectedItem.Value! ="") { using(OrderDBContainerdb=newOrderDBContainer()) { UserAccountuserAccount=newUserAccount(); userAccount.Id=Convert.ToInt32(ddlUsers.SelectedValue); db.UserAccounts.Attach(userAccount); db.ObjectStateManager.ChangeObjectState(userAccount,System.Data.EntityState.Deleted); db.SaveChanges(); LoadUserDropDownList(); txtFirstName.Text=""; txtLastName.Text=""; lblInserted.Text=""; lblUpdated.Text=""; } } 代码首先创建了一个UserAccount对象,将它的Id设置为选中项的Id.然后将UserAccount附加到UserAccount集合中,设置它的状态为删除。 调用SaveChanges操作,将该条数据删除,刷新DropDownList的数据源,搞定! 小结 可以发现,使用EF4轻松的就搞定了一般的数据增删改查操作。 下一篇文章,我将向你介绍如何采用存储过程进行增删改查操作,而不使用EF生成的SQL语句,希望你能喜欢。 本文相关项目文件: 点击下载 本文独立博客链接:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Entity framework第二篇 framework 第二
![提示](https://static.bdocx.com/images/bang_tan.gif)