CodeFirst 实例一

1.新建一个WebForm项目,名字就叫CodeFirstEF

2:在项目中添加引用EF所需要的5个核心类库:(如果找不到这几个类库,可以新建基于数据库的ADO.NET 实体数据模型,然后从里面拷贝)

1. EntityFramework

2. System.Data.Entity

3. System.ComponentModel.DataAnnotations

4. System.Runtime.Serialization

5. System.Security

3:EF需要依赖Web.config配置文件中的三个节点。我需要将这三个节点拷贝到项目的Web.config文件中的<configuration>节点下。这三个节点就是:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--
  3. 有关如何配置 ASP.NET 应用程序的详细信息,请访问
  4. http://go.microsoft.com/fwlink/?LinkId=169433
  5. -->
  6. <configuration>
  7. <!--要将以下个3节点加入到Web.config文件中来;当然 <system.web>这个节点本身就存在的-->
  8. <configSections>
  9. <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  10. <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  11. </configSections>
  12. <system.web>
  13. <compilation debug="true" targetFramework="4.5" />
  14. <httpRuntime targetFramework="4.5" />
  15. </system.web>
  16. <connectionStrings>
  17. <!--如果从别处拷贝过来的话,这需要将connectionString的值修改成我们自己需要的连接字符串。如果是使用的ADO.NET的话还需要将providerName的值修改成providerName="System.Data.SqlClient"-->
  18. <add name="ConnStr" connectionString="server=.;database=MySales ;uid=sa;pwd=123456;" providerName="System.Data.SqlClient" />
  19. </connectionStrings>
  20. <entityFramework>
  21. <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
  22. <parameters>
  23. <parameter value="v11.0" />
  24. </parameters>
  25. </defaultConnectionFactory>
  26. </entityFramework>
  27. </configuration>
<?xml version="1.0" encoding="utf-8"?>

<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=169433
--> <configuration> <!--要将以下个3节点加入到Web.config文件中来;当然 <system.web>这个节点本身就存在的-->
<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=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<connectionStrings>
<!--如果从别处拷贝过来的话,这需要将connectionString的值修改成我们自己需要的连接字符串。如果是使用的ADO.NET的话还需要将providerName的值修改成providerName="System.Data.SqlClient"-->
<add name="ConnStr" connectionString="server=.;database=MySales ;uid=sa;pwd=123456;" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
</configuration>

4.我们想使用EF去访问数据库,就必须要定义一个EF上下文容器类

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Data.Entity; //要想使用DbContext类就必须要引入一个类库
  6. using CodeFirstEF.Model;
  7. namespace CodeFirstEF.EFlib
  8. {
  9. //BaseDbContext类继承了BaseDbContext类后,它就是一个上下文容器类了
  10. public class BaseDbContext:DbContext
  11. {
  12. //这个类将来要被实例化的,实例化应该初始化ADO.NET的连接字符串,所以这里调用父类一个带参数的构造函数,指明去Web.config文件去<connectionStrings>节点下找到Name为ConnStr的节点值去初始化这个ADO..NET连接字符串
  13. public BaseDbContext() : base("name=ConnStr")
  14. {
  15. //告诉EF容器,如果没有ConnStr连接字符串中配置的数据库,则自动创建这个数据库。(我们ConnStr连接字符串中配置的数据库名字叫MySales,如果我们SQL Server中不存在这个MySales数据库则自动创建这个数据库)
  16. base.Database.CreateIfNotExists();
  17. }
  18. //public DbSet<UserInfo> UserInfo{get;set;} //可建立这个属性,也可以不建立,如果不建立的时候,直接使用db.Set<UserInfo>().Add(model);来增加数据
  19. }
  20. }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity; //要想使用DbContext类就必须要引入一个类库
using CodeFirstEF.Model; namespace CodeFirstEF.EFlib
{
//BaseDbContext类继承了BaseDbContext类后,它就是一个上下文容器类了
public class BaseDbContext:DbContext
{
//这个类将来要被实例化的,实例化应该初始化ADO.NET的连接字符串,所以这里调用父类一个带参数的构造函数,指明去Web.config文件去<connectionStrings>节点下找到Name为ConnStr的节点值去初始化这个ADO..NET连接字符串
public BaseDbContext() : base("name=ConnStr")
{
//告诉EF容器,如果没有ConnStr连接字符串中配置的数据库,则自动创建这个数据库。(我们ConnStr连接字符串中配置的数据库名字叫MySales,如果我们SQL Server中不存在这个MySales数据库则自动创建这个数据库)
base.Database.CreateIfNotExists(); } //public DbSet<UserInfo> UserInfo{get;set;} //可建立这个属性,也可以不建立,如果不建立的时候,直接使用db.Set<UserInfo>().Add(model);来增加数据
}
}

现在就可以使用这个EF容器类了

新建一个Web窗体

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. namespace CodeFirstEF
  8. {
  9. using CodeFirstEF.EFlib;
  10. using CodeFirstEF.Model;
  11. public partial class WebForm1 : System.Web.UI.Page
  12. {
  13. protected void Page_Load(object sender, EventArgs e)
  14. {
  15. BaseDbContext db = new BaseDbContext();
  16. UserInfo model = new UserInfo() {UserName = "小肚子", Age = 103 };
  17. //db.UserInfo.Add(model);//或者采用下面的方式
  18. db.Set<UserInfo>().Add(model);
  19. db.SaveChanges();
  20. }
  21. }
  22. }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace CodeFirstEF
{
using CodeFirstEF.EFlib;
using CodeFirstEF.Model;
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
BaseDbContext db = new BaseDbContext(); UserInfo model = new UserInfo() {UserName = "小肚子", Age = 103 }; //db.UserInfo.Add(model);//或者采用下面的方式
db.Set<UserInfo>().Add(model); db.SaveChanges();
}
}
}

然后运行,我们会发现SQL Server中已经生成了MySales这个数据库了。同时下面还生成了一个名字为UserInfo的表。同时表中还插入了一条数据。

----------------------------------------------

CodeFirst 实例二  | 使用三层

下面是最新的做做的一个Demo 使用三层

UI层

WebForm1.aspx

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. namespace WebApp
  8. {
  9. using BLL;
  10. using Models;
  11. public partial class WebForm1 : System.Web.UI.Page
  12. {
  13. protected void Page_Load(object sender, EventArgs e)
  14. {
  15. T_UserInfoBll bll = new T_UserInfoBll();
  16. T_UserInfo user = new T_UserInfo() { Name = "张三丰", Age = 105 };
  17. bll.AddData(user);
  18. var b = bll.QueryWhere(r => r.Age > 10);
  19. this.GridView1.DataSource = b;
  20. GridView1.DataBind();
  21. }
  22. }
  23. }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace WebApp
{
using BLL;
using Models;
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
T_UserInfoBll bll = new T_UserInfoBll(); T_UserInfo user = new T_UserInfo() { Name = "张三丰", Age = 105 };
bll.AddData(user); var b = bll.QueryWhere(r => r.Age > 10);
this.GridView1.DataSource = b;
GridView1.DataBind();
}
}
}

BLL层

T_UserInfoBll.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace BLL
  7. {
  8. using DAL;
  9. using Models;
  10. public class T_UserInfoBll
  11. {
  12. public List<T_UserInfo> QueryWhere(System.Linq.Expressions.Expression<Func<T_UserInfo, bool>> where)
  13. {
  14. T_UserInfoDal dal = new T_UserInfoDal();
  15. return dal.QueryWhere(where);
  16. }
  17. public bool AddData(T_UserInfo model)
  18. {
  19. T_UserInfoDal dal = new T_UserInfoDal();
  20. return  dal.AddData(model);
  21. }
  22. }
  23. }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace BLL
{
using DAL;
using Models;
public class T_UserInfoBll
{ public List<T_UserInfo> QueryWhere(System.Linq.Expressions.Expression<Func<T_UserInfo, bool>> where)
{
T_UserInfoDal dal = new T_UserInfoDal();
return dal.QueryWhere(where);
} public bool AddData(T_UserInfo model)
{
T_UserInfoDal dal = new T_UserInfoDal();
return dal.AddData(model);
}
}
}

DAL层

T_UserInfoDal.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace DAL
  7. {
  8. using Models;
  9. public class T_UserInfoDal
  10. {
  11. public List<T_UserInfo> QueryWhere(System.Linq.Expressions.Expression<Func<T_UserInfo, bool>> where)
  12. {
  13. BaseDbContext db = new BaseDbContext();
  14. return db.T_UserInfo.Where(where).ToList();
  15. }
  16. public bool AddData(T_UserInfo model)
  17. {
  18. BaseDbContext db = new BaseDbContext();
  19. db.T_UserInfo.Add(model);
  20. int isOK = db.SaveChanges(); //返回数据是:已写入基础数据库的对象的数目。
  21. return isOK>0;
  22. }
  23. }
  24. }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace DAL
{
using Models;
public class T_UserInfoDal
{
public List<T_UserInfo> QueryWhere(System.Linq.Expressions.Expression<Func<T_UserInfo, bool>> where)
{
BaseDbContext db = new BaseDbContext();
return db.T_UserInfo.Where(where).ToList();
} public bool AddData(T_UserInfo model)
{
BaseDbContext db = new BaseDbContext();
db.T_UserInfo.Add(model);
int isOK = db.SaveChanges(); //返回数据是:已写入基础数据库的对象的数目。
return isOK>0;
}
}
}

Models

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Models
  7. {
  8. using System.ComponentModel.DataAnnotations;
  9. public class T_UserInfo
  10. {
  11. [Key] //因为这里我们并没有直接添加EF,所以意味着这里没有映射实体类的元数据了。所以这里我们要手动的标注主键
  12. public int id { get; set; }
  13. public string Name { get; set; }
  14. public int Age { get; set; }
  15. }
  16. }
using System;
using System.Collections.Generic; using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Models
{
using System.ComponentModel.DataAnnotations;
public class T_UserInfo
{
[Key] //因为这里我们并没有直接添加EF,所以意味着这里没有映射实体类的元数据了。所以这里我们要手动的标注主键
public int id { get; set; } public string Name { get; set; } public int Age { get; set; }
}
}

 

阅读全文        

            版权声明:本文为博主原创文章,未经博主允许不得转载。

EF| CodeFirst 代码先行的更多相关文章

  1. .net EF之CodeFirst代码先行(转)

    为了支持以设计为中心的开发流程,EF还更多地支持以代码为中心 (code-centric) ,我们称为代码优先的开发,代码优先的开发支持更加优美的开发流程,它允许你在不使用设计器或者定义一个 XML ...

  2. EF框架搭建小总结--CodeFirst代码优先

    前言:之前在下总结编写了一篇 EF框架搭建小总结--ModelFirst模型优先 博文,看到一段时间内该博文的访问量蹭.蹭蹭.蹭蹭蹭...往上涨(实际也不是很多,嘿嘿),但是还是按捺不住内心的喜悦(蛮 ...

  3. 1.【使用EF Code-First方式和Fluent API来探讨EF中的关系】

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/relationship-in-entity-framework-using-code-firs ...

  4. Entity Framework 数据库先行、模型先行、代码先行

    数据库先行(Database First):基于已存在的数据库,利用某些工具(如Vs提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件. 模型先 ...

  5. [.NET领域驱动设计实战系列]专题一:前期准备之EF CodeFirst

    一.前言 从去年已经接触领域驱动设计(Domain-Driven Design)了,当时就想自己搭建一个DDD框架,所以当时看了很多DDD方面的书,例如领域驱动模式与实战,领域驱动设计:软件核心复杂性 ...

  6. EF CodeFirs 代码迁移、数据迁移

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    标题叫EF CodeFirs 代码迁移.数据迁移. ...

  7. EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧 ...

  8. EF CodeFirst增删改查之‘CRUD’

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    本篇旨在学习EF增删改查四大操作 上一节讲述了EF ...

  9. EF CodeFirst 创建数据库

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    话说EF支持三种模式:Code First   M ...

随机推荐

  1. Qt QDateEdit QDateTimeEdit

    展示一个效果,然后附上一个“笑话~~”...回想起来都是搞笑的. 笑话来了,,,,几个月前,为了做出时间选择界面,我亲自“创造”了一个...今天发现了QDateEdit的属性CalendarPopup ...

  2. CentOS 7下 部署Redis-cluster集群

    redis集群是一个无中心的分布式redis存储架构,可以在多个节点之间进行数据共享,解决了redis高可用.可扩展等问题,redis集群提供了以下两个好处:1)将数据自动切分(split)到多个节点 ...

  3. 在 Azure 上部署 Kubernetes 集群

    在实验.演示的时候,或者是生产过程中,我经常会需要运行一些 Docker 负载.虽然这在本地计算机上十分容易,但是当你要在云端运行的时候就有点困难了.相比于本地运行,在云端运行真的太复杂了.我尝试了几 ...

  4. 软件测试实验二----selenium、katalon、junit

    1.安装firefox和seleniumIDE.katalon 安装按成后在Firefox中有seleniumIDE.katalon的图标 2.使用katalon导出测试脚本 点击katalon的插件 ...

  5. Vue入门:Vue项目创建及启动

    1. 创建Vue项目存放地址 用于存放Vue项目,找个自己处理方便的地方.本人地址:D:\Program Files\Workspace\Vue 2. 创建项目 进入cmd窗口 进入项目存放地址 执行 ...

  6. kubernets code-generator

    REF: how-to-generate-client-codes-for-kubernetes-custom-resource-definitions-crd Firstly we need to ...

  7. 剑指offer(66)机器人的运动范围

    题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...

  8. JSESSIONID的简单说明

    原文地址:http://blog.csdn.net/chunqiuwei/article/details/23461995 1)第一次访问服务器的时候,会在响应头里面看到Set-Cookie信息(只有 ...

  9. CF 528D. Fuzzy Search NTT

    CF 528D. Fuzzy Search NTT 题目大意 给出文本串S和模式串T和k,S,T为DNA序列(只含ATGC).对于S中的每个位置\(i\),只要中[i-k,i+k]有一个位置匹配了字符 ...

  10. git忽略对已入库文件的修改

    项目开发过程中,会遇到本地配置文件每个开发人员不同的情况,但如果遇到类似数据库配置这种最终需要加入 git 版本控制的配置,则会陷入两难境地.要么不跟踪,要么有人提交后其他人同步下来必须手动修改,非常 ...