本篇文介绍一下Entity Framework Code First的简单用法,通过一个学生信息的增删查改来学习Entity Framework的使用及与存储过程的交互。我也是学习Entity Framework新手,有说的不对地方欢迎指正。

本文使用的开发环境为VS2010(sp1)+MVC4.0+EF5.0。

一、我们新建一个空MVC空项目

添加EntityFramework.dll的引用。

二、修改配web.config置文件(web.config为根目录下的)

添加EntityFramework配置和数据库连接字符串。

 <configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
<connectionStrings>
<add name="strConn" connectionString="Data Source=ERIC\SQLEXPRESS;Initial Catalog=EfSample;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

三、在Models文件夹下新建Students.cs和DbHelper.cs

1、Students为学生信息实体类,并关联数据库表和其他一些属性说明,代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations; namespace MVCEF.Models
{
[Table("tb_Students", Schema = "dbo")]//关联数据表 dbo.tb_Students
public class Students
{
[Key]
public string Num { get; set; }
[MaxLength(),Required(ErrorMessage="姓名不能为空")]
[Column(TypeName = "nvarchar")]
public string Name { get; set; }
public int Age { get; set; }
[MaxLength()]
[Column(TypeName = "varchar")]
public string Sex { get; set; }
[MaxLength()]
public string Class { get; set; }
}
}
说明:用属性Key说明的字段如果是int类型,EF会默认该字段对应的数据库表字段是自增的,好像是这样的,说的不对的请纠正。

2、DbHelper.cs主要创建数据库上下文,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.Data.Entity.Migrations; namespace MVCEF.Models
{
public class DbHelper:DbContext
{
public DbHelper()
: base("strConn")
{
//自动创建表,如果Entity有改到就更新到表结构
Database.SetInitializer<DbHelper>(new MigrateDatabaseToLatestVersion<DbHelper, ReportingDbMigrationsConfiguration>());
}
public DbSet<Students> Students { get; set; }
}
internal sealed class ReportingDbMigrationsConfiguration : DbMigrationsConfiguration<DbHelper>
{
public ReportingDbMigrationsConfiguration()
{
AutomaticMigrationsEnabled = true;//任何Model Class的修改將會直接更新DB
AutomaticMigrationDataLossAllowed = true;
}
}
}
说明:这里还需要请用System.Data.Entity.DLL

要不然会报如下的一个错误:

四、我们创建表tb_Students和存储过程proc_1

CREATE TABLE [dbo].[tb_Students](
[Num] [varchar](128) NOT NULL,
[Name] [nvarchar](10) NOT NULL,
[Age] [int] NULL,
[Sex] [varchar](10) NULL,
[Class] [nvarchar](50) NULL,
PRIMARY KEY CLUSTERED
(
[Num] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] GO

tb_Students

create proc proc_1
@Num varchar(128),
@Name varchar(50)
as
select * from dbo.tb_Students where Num=@Num and Name=@Name

proc_1

五、HomeController.cs调用EF方法实现增删改查。

方法都比较简单,这里就不做详细说明了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVCEF.Models;
using System.Data;
using System.Data.SqlClient; namespace MVCEF.Controllers
{
public class HomeController : Controller
{
DbHelper db = new DbHelper();
private static List<Students> listStu = new List<Students>()
{
new Students(){Num="s0001",Name="张三",Age=,Sex="man",Class="计算机1班"},
new Students(){Num="s0002",Name="李四",Age=,Sex="man",Class="计算机1班"},
new Students(){Num="s0003",Name="王五",Age=,Sex="man",Class="计算机1班"},
new Students(){Num="s0004",Name="小红",Age=,Sex="women",Class="计算机'\"1班"},
};
//
// GET: /Home/ public ActionResult Index()
{
//如果没有数据初始化数据
if (db.Students.Count() == )
{
listStu.ForEach(it =>
{
db.Students.Add(it);
});
db.SaveChanges();
}
List<Students> lst = db.Students.ToList();
//实现2:sql语句实现
//List<Students> lst = db.Students.SqlQuery("select * from tb_Students").ToList();
//与存储过程交互
// var result = db.Database.SqlQuery<Students>("exec proc_1 @p0,@p1", "s0001","张三1").ToList();
return View(lst);
}
public ActionResult Add()
{
return View(new Students());
}
[HttpPost]
public ActionResult Add(Students stu)
{
string Message = string.Empty;
if (db.Students.Where(it => it.Num == stu.Num).FirstOrDefault()!=null)
{
Message = "学号已经存在";
ViewBag.Msg = Message;
return View();
}
db.Students.Add(stu);
db.SaveChanges();
return RedirectToAction("Index","Home");
} public ActionResult edit(string id)
{
var stu=db.Students.Where(it => it.Num == id).FirstOrDefault();
return View(stu);
}
[HttpPost]
public ActionResult edit(Students stu, FormCollection form,string id)
{
stu.Num = id;
db.Entry(stu).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index", "Home");
}
//删除
public ActionResult Del(string id)
{
/*方法1
var stu = db.Students.Where(it => it.Num == id).FirstOrDefault();
db.Entry(stu).State = EntityState.Deleted;
db.SaveChanges();
*/
//方法2
string strsql = "delete from tb_Students where Num=@Num";
SqlParameter[] paras =
{
new SqlParameter("@Num",SqlDbType.NVarChar,)
};
paras[].Value=id;
db.Database.ExecuteSqlCommand(strsql, paras);
db.SaveChanges();
return RedirectToAction("Index", "Home");
}
}
}

六、EF与存储过程交互

EF与存储过程交互详见Index方法: var result = db.Database.SqlQuery<Students>("exec proc_1 @p0,@p1", "s0001","张三1").ToList();
其中@p0,@p1为传入存储过程中的参数(依次对应存储过程参数@Num和@Name)。
我们在使用EF调用存储过程的时候传入的参数为@p0,@p1,@p2,@p3 依此排列下去(蛋疼不知道为啥这样设计)

但是如何获取存储过程的返回值和out参数我还没有找到,如果你知道希望能留下你的答案,共同学习。
 

如果你有什么更好的关于EF的学习资料欢迎共享共同学习

点击下载源码

每天学习一点点,每天进步一点点

EntityFramework使用总结(与MVC4.0实现CURD操作)的更多相关文章

  1. MySQL 的 CURD 操作

    0. 说明 CURD 操作通常是使用关系型数据库系统中的结构化查询语言(Structured Query Language,SQL)完成的 CURD 定义了用于处理数据的基本原子操作 CURD 代表创 ...

  2. Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据

    Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据 在这一节中,你将新创建一个新的 MoviesController类,并编写代码,实现获取影片数据和使用视图模板在浏览器中展现 ...

  3. Spring.Net在Mvc4.0中应用的说明

    案例Demo:http://yunpan.cn/cJ5aZrm7Uybi3 访问密码 414b Spring.Net在Mvc4.0中应用的说明 1.引用dll 2.修改Global文件 (Spring ...

  4. iis7.0上发布mvc4.0网站

    步骤如下: 1.右击需要发布的项目,在弹出的菜单中选择“发布...”选项 2.在“发布web”对话框中进行设置,配置文件名称默认为“配置文件1”可以修改为需要的名字,以便识别,也可以不改.发布方法选择 ...

  5. 一. DotNet MVC4.0+EasyUI Web简单框架-前言

    之所以说它简单,是因为仅仅用了大家最熟悉的三层架构,简单明了 1.先新建一个MVC4.0 Web项目 2.添加EasyUI的引用,放到Script底下 http://files.cnblogs.com ...

  6. 建筑材料系统 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发

    框架介绍: 1.基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2.采用MVC的框架模式,具有耦合性低.重用性高.生命周期成本低.可维护性 ...

  7. 利用CSS预处理技术实现项目换肤功能(less css + asp.net mvc4.0 bundle)

    一.背景 在越来越重视用户体验的今天,换肤功能也慢慢被重视起来.一个web系统用户可以选择一个自己喜欢的系统主题,在用户眼里还是会多少加点分的.我们很开心的是easyui v1.3.4有自带defau ...

  8. MVC认知路【点点滴滴支离破碎】【三】----IIS7.5上部署MVC4.0

    发布web到iis不能运行Google   ----- ╲ http://stackoverflow.com/questions/12057540/installing-asp-net-mvc-4-o ...

  9. [部署]MVC4.0+EF5.0+ODT+ORACLE相关注意事项

    摘要 项目开发工具:VS2012旗舰版(.NetFrameWork4.5.1),WIN7 64bit,Oracle 11g 服务器环境:Windows Server2008 R2 64bit,.Net ...

随机推荐

  1. 20175234 2018-2019-2 《Java程序设计》第三周学习总结

    20175234 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容重难点总结 关于驼峰式的认识 为了增加程序的可读性,除了在代码之间增加注释之外,程序员大都把代码中 ...

  2. android 隐藏虚拟按钮栏及标题等权限设置

    华为手机有虚拟按钮,根据以下设置方法可以进行隐藏控制 /** * 隐藏虚拟按键,并且全屏 */ protected void hideBottomUIMenu(Context context){ if ...

  3. LibreOJ #6014. 「网络流 24 题」最长 k 可重区间集

    #6014. 「网络流 24 题」最长 k 可重区间集 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   ...

  4. 使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据

    使用PreparedStatement向数据表中插入.修改.删除.获取Blob类型的数据 2014-09-07 20:17 Blob介绍 BLOB类型的字段用于存储二进制数据 MySQL中,BLOB是 ...

  5. 通过JDBC进行简单的增删改查(以MySQL为例) 目录

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

  6. CSS样式简介

    层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不仅可以静态 ...

  7. easy ui Uncaught Error: cannot call methods on tooltip prior to initialization; attempted to call method 'hide'

    今天bootstrap 和easy ui混用时候报了这么一个错误,本来可以点击编辑的,但是现在一点击就报错,

  8. 如何监控redis的cpu使用率

    redis默认是单线程运行的,为了充分利用机器的cpu,正常情况下一台服务器上会装多个实例.如果通过top命令监控机器的cpu的话,监控值很笼统,不能精确到单redis实例的cpu使用率监控.而且ce ...

  9. kubernetes中filebeat以sidecar方式和应用一起部署,并且传入环境变量

    本文的环境介绍 [root@m-30-1 ~]# kubectl version Client Version: version.Info{Major:"1", Minor:&qu ...

  10. Beta冲刺 (3/7)

    Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 熟悉并编写小程序的自定义控件 编辑文 ...