好久没写博客了,今天研究了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. mysql语句 索引操作

    创建索引:(help create index;) CREATE INDEX indexName ON tableName(Coll,Coll....); ALTER TABLE tableName ...

  2. mysql5.7密码问题

    安装: yum search mysql """mysql-server mysql mysql-devel mysql-community-server"&q ...

  3. HDU1257

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  4. MacPort 的使用

    MacPorts 的安装和使用   官网下载最版本的 安装包   自动安装  可能会出现很慢的情况   设置环境变量   vim ~/.bash_profile      i  插入修改  :wq 保 ...

  5. C# - 时间格式

    如果是字符串,需要先转化为DateTime格式 DateTime ExDate = DateTime.Parse(dt.Rows[]["HKMonth"].ToNotNullStr ...

  6. 基于Jenkins的环境搭建

    基于 Jenkins 快速搭建持续集成环境 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础.Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续 ...

  7. 网站部署后Parser Error Message: Could not load type 的解决方案

    asp.net 的Webproject 项目是在64bit机上开发,默认选项发布后,部署到32bit的服务器上,出现Parser Error Message: Could not load type的 ...

  8. BizTalk开发系列(二十二) 开发自定义Map Functoid

    尽管 BizTalk Server 提供许多Functoid以支持一系列不同的操作,但仍可能会遇到需要其他方法的情况.<BizTalk开发系列 Map扩展开发>介绍了通过使用自定义 XSL ...

  9. 【iCore3 双核心板】例程十八:USB_VCP实验——虚拟串口

    实验指导书及代码包下载: http://pan.baidu.com/s/1c1erqIc iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  10. CSS权威指南 - 基本视觉格式化 4

    改变元素显示 没有讨论与表格相关的.列表list-item的值.之后讨论. 改变显示角色 显示为块级元素 将一串链接(行内元素)改变垂直放置,若有如下一连串的链接: <div id=" ...