好久没写博客了,今天研究了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的更多相关文章

  1. MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  2. MVC项目实践,在三层架构下实现SportsStore-09,ASP.NET MVC调用ASP.NET Web API的查询服务

    ASP.NET Web API和WCF都体现了REST软件架构风格.在REST中,把一切数据视为资源,所以也是一种面向资源的架构风格.所有的资源都可以通过URI来唯一标识,通过对资源的HTTP操作(G ...

  3. MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构

    在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ...

  4. MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  5. MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  6. MVC项目实践,在三层架构下实现SportsStore-04,实现分页

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  7. MVC项目实践,在三层架构下实现SportsStore-05,实现导航

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  8. MVC项目实践,在三层架构下实现SportsStore-06,实现购物车

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  9. MVC项目实践,在三层架构下实现SportsStore-07,实现订单提交

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

随机推荐

  1. 【Go语言】I/O专题

    本文目录 1.bytes包:字节切片.Buffer和Reader 1_1.字节切片处理函数 1_1_1.基本处理函数 1_1_2.字节切片比较函数 1_1_3.字节切片前后缀检查函数 1_1_4.字节 ...

  2. [CareerCup] 17.13 BiNode 双向节点

    17.13 Consider a simple node-like data structure called BiNode, which has pointers to two other node ...

  3. centos7 服务管理

    服务脚本位置: /usr/lib/systemd/system  (开机不登录就能够运行的服务) /usr/lib/systemd/user      (用户登录后才能运行的服务) 服务脚本示例: [ ...

  4. PLSQL Developer注册码

    Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number:601769password:xs374ca

  5. Java读取Execl表格数据

    在前面提到用java代码新建一个Execl 表格并添加数据到表格中, 这次写了一个读取Execl表格数据并添加导数据库中的案列 给定对方一个Execl模板表格,如果导入的Execl表格和预订的表格不相 ...

  6. sql2008 r2 重新启动 失败解决办法

    一.问题描述: 在计算机中安装sql_server_2008_R2,安装前执行检查时,提示重启计算机失败.重启计算机后,再执行检查仍然提示这个错误. 二.解决方案: 1.在开始->运行中输入re ...

  7. 第 13 章 剖析el表达式

    13.1. 再谈el(Expression Language) 我们已经知道el是jsp-2.0规范的一部分,tomcat-5.x版本以上都已经能够支持jsp-2.0规范,但在更低版本的tomcat和 ...

  8. 平方和和立方和_hdu2007

    #include <stdio.h>int main(){ int a, b, m , n, t;  while( scanf("%d %d", &a, &am ...

  9. 20145337实验五Java网络编程及安全

    20145337实验五Java网络编程及安全 实验内容 掌握Socket程序的编写 掌握密码技术的使用 设计安全传输系统 实验步骤 基于Java Socket实现安全传输 基于TCP实现客户端和服务器 ...

  10. spring log4j.properties 没有日志的问题

    一.   log4j.properties 1. log4j.properties放在spring工程的src/main/rescours目录下无法读取. 测试后发现需要把log4j.properti ...