三层架构下的EntityFramework codefirst
好久没写博客了,今天研究了EF框架的CodeFirst模式,从字面意思可以看出,代码优先.所谓代码优先,与以往的添加ado.net不同,主要是编写代码生成数据库和数据表,生成数据实体映射。个人感觉这种方法相比较自动添加数据集的方式是不错的,但是有一个缺点就是,你编写的生成数据库和数据表的代码一旦写好,改起来就比较麻烦,就算改动了一个属性,就得将数据库删掉,重新运行代码(不删也行,但是需要更新数据库,比较麻烦)。好了,请看代码:
1.项目使用三层架构,在数据访问层用的是EF框架

2.在Model层新建Score和StudentModel类,内容如下
namespace Students.Model
{
public class Score
{
/// <summary>
/// Gets or sets 分数ID
/// </summary>
public int ScoreID { get; set; } /// <summary>
/// Gets or sets 学生信息
/// </summary>
public virtual StudentsModel Student { get; set; } public virtual int? StudentId { get; set; } /// <summary>
/// Gets or sets 学生分数
/// </summary>
public decimal StudentScore { get; set; }
}
}
Score
namespace Students.Model
{
public class StudentsModel
{
[Key]
public int StudentID { get; set; } /// <summary>
/// Gets or sets 学生学号
/// </summary>
public string StudentNumber { get; set; } /// <summary>
/// Gets or sets 学生姓名
/// </summary>
public string StudentName { get; set; }
}
}
StudentsModel
3.在DAL层新建一个StudentContext类,主要是构造实体对象(该类继承DbContext)
namespace Students.DAL
{
public class StudentContext:DbContext
{
//构造实例模型
public DbSet<StudentsModel> Student { get; set; } public DbSet<Score> Score { get; set; }
}
}
StudentContext
4.配置Web.config,将连接字符串写入配置文件里
<add name="StudentContext" connectionString="Data Source=PC201307311548;Initial Catalog=Student;Integrated Security=True" providerName="System.Data.SqlClient"/>
配置Web.config
5.实现方法
//实例化数据源连接信息
private StudentContext context; public ScoreDAL()
{
context = new StudentContext();
} ///添加学生分数
public bool Add(Score score,string stuNum)
{
//判断学生是否存在
var student = this.context.Student.Where(p => p.StudentNumber == stuNum).FirstOrDefault();
try
{
if (student == null)
{
return false;
}
else
{
score.Student = student;
context.Score.Add(score);
context.SaveChanges();
context.Dispose();
return true;
}
}
catch (Exception e)
{
throw e;
}
} //修改学生分数
public bool Update(string stuNum,decimal score)
{
//查询学生是否有分数
var stuscore = this.context.Score.Where(p => p.Student.StudentNumber == stuNum).FirstOrDefault(); if (stuscore == null)
{
return false;
}
else
{
stuscore.StudentScore = score;
this.context.SaveChanges();
} return true;
} //删除学生信息
public bool Delete(string scoreId)
{
try
{
int id=int.Parse(scoreId);
//查询学生成绩是否存在
var score = this.context.Score.Where(p => p.ScoreID == id).FirstOrDefault(); //如果存在则执行删除,不存在则返回信息
if (score == null)
{
return true;
}
else
{
//删除成绩信息,提交到数据库执行
this.context.Score.Remove(score);
this.context.SaveChanges();
}
}
catch
{
return false;
} return true;
}
ScoreDAL示例
6.实现效果


三层架构下的EntityFramework codefirst的更多相关文章
- MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-09,ASP.NET MVC调用ASP.NET Web API的查询服务
ASP.NET Web API和WCF都体现了REST软件架构风格.在REST中,把一切数据视为资源,所以也是一种面向资源的架构风格.所有的资源都可以通过URI来唯一标识,通过对资源的HTTP操作(G ...
- MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构
在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ...
- MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-04,实现分页
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-05,实现导航
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-06,实现购物车
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
- MVC项目实践,在三层架构下实现SportsStore-07,实现订单提交
SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...
随机推荐
- GO语言练习:switch基本用法
1.代码 2.运行 1.代码 package main import "fmt" func switch_1(i int){ switch i { : fmt.Println(&q ...
- Node.js的函数返回值
先看一段代码: function select(sqlscript){ var result = ""; sql.connect(config, function( ...
- 用atom写LaTeX文档
下载并安装Tex Live: 下载页面 下载并安装atom:下载页面 打开atom File -> Settings -> Install 搜索并安装: language-latex la ...
- sql to_char 日期转换字符串
1.转换函数 与date操作关系最大的就是两个转换函数:to_date(),to_char() to_date() 作用将字符类型按一定格式转化为日期类型: 具体用法:to_date('2004-11 ...
- 做为一名dba你应该知道这些数据恢复
1.将备份数据 拉取到本地虚拟机上 进行恢复(千万不要把数据直接恢复到生产中,除非迫不得已!!) 2.在本地虚拟机上恢复之后,导出需要恢复的数据. 3.在本地虚拟机上恢复做恢复测试. ...
- sublime 3 user Settings
{ "auto_complete": true, "auto_complete_delay": 50, "auto_complete_size_lim ...
- zk 获取session,request,servletContext,response
(参考:http://www.dotblogs.com.tw/rockywang/archive/2010/01/13/12995.aspx) HttpServletRequest request = ...
- win10我能ping通他人,但他人ping不同我
这是防火墙的原因,关闭防火墙即可
- Hibernate查询 Query Language
1,Native SQL ->HQL->EJBQL->QBC(Query By Cretira)->QBE(Query By Example) 此排列是根据可实现功能大小排序.
- js中if的另类实现
偶然发现一篇有意思的博客<JS利用短路原理简写if语句> 利用&&短路来实现if的简写. 如 1==2&&a1=1,则后面的a1=1不会进行判断,1==1 ...