EF| CodeFirst 代码先行
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>节点下。这三个节点就是:
- <?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>
<?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上下文容器类
- 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);来增加数据
- }
- }
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窗体
- 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();
- }
- }
- }
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
- 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();
- }
- }
- }
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
- 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);
- }
- }
- }
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
- 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;
- }
- }
- }
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
- 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; }
- }
- }
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 代码先行的更多相关文章
- .net EF之CodeFirst代码先行(转)
为了支持以设计为中心的开发流程,EF还更多地支持以代码为中心 (code-centric) ,我们称为代码优先的开发,代码优先的开发支持更加优美的开发流程,它允许你在不使用设计器或者定义一个 XML ...
- EF框架搭建小总结--CodeFirst代码优先
前言:之前在下总结编写了一篇 EF框架搭建小总结--ModelFirst模型优先 博文,看到一段时间内该博文的访问量蹭.蹭蹭.蹭蹭蹭...往上涨(实际也不是很多,嘿嘿),但是还是按捺不住内心的喜悦(蛮 ...
- 1.【使用EF Code-First方式和Fluent API来探讨EF中的关系】
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/relationship-in-entity-framework-using-code-firs ...
- Entity Framework 数据库先行、模型先行、代码先行
数据库先行(Database First):基于已存在的数据库,利用某些工具(如Vs提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件. 模型先 ...
- [.NET领域驱动设计实战系列]专题一:前期准备之EF CodeFirst
一.前言 从去年已经接触领域驱动设计(Domain-Driven Design)了,当时就想自己搭建一个DDD框架,所以当时看了很多DDD方面的书,例如领域驱动模式与实战,领域驱动设计:软件核心复杂性 ...
- EF CodeFirs 代码迁移、数据迁移
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 标题叫EF CodeFirs 代码迁移.数据迁移. ...
- EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧 ...
- EF CodeFirst增删改查之‘CRUD’
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本篇旨在学习EF增删改查四大操作 上一节讲述了EF ...
- EF CodeFirst 创建数据库
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 话说EF支持三种模式:Code First M ...
随机推荐
- Data type
先放官方文档: https://dev.mysql.com/doc/refman/5.5/en/data-types.html MySQL支持多种类型的SQL数据类型:数字类型,日期和时间类型,字符串 ...
- CentOS安装PHP7.*
安装 如之前安装过PHP,则先卸载 $ yum -y remove php* 由于linux的yum源不存在php7.x,所以我们要更改yum源 $ rpm -Uvh https://dl.fedor ...
- 6.JAVA基础复习——JAVA中文档注释与帮助文档的生成
java中的文档注释:用于说明该类的功能作用方便他人使用关键词前需要加@符 用于类的注释 @author name 作者 @version v1.0 版本 …… 用于函数的注释 @param para ...
- JS动态添加行列
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Add-Delete Row.a ...
- CentOS 7 yum install cobbler2.8.3
安装前注意事项: 1.cobbler主机要为静态ip,否则和dhcpd服务冲突. 2.如果用虚拟机安装,client的内存请设置为2g以上,否则会报错. 3.kickstart文件中不要出现中文,大坑 ...
- java窗体
听完老师所讲的窗体,然后自己就去尝试写代码,结果是窗体出现了,但是就是不能关闭,求解!! package Swing.src.swring; import java.awt.Color;import ...
- web.xml的学习
web.xml 文件提供有关包含 Web 应用程序的 Web 组件的配置和部署信息. Java Servlet 规范根据 XML 模式文档来定义 web.xml 部署描述符文件.为了获取向后兼容性,W ...
- dict字典的一些优势和劣势
01. 键必须是可散列的一个可散列的对象必须满足以下要求. (1) 支持 hash() 函数,并且通过 __hash__() 方法所得到的散列值是不变的. (2) 支持通过 __eq__() 方法来检 ...
- iP私网地址
私网地址范围:A类10.0.0.0~255.255.255 B类172.16.0.0~172.31.255.255 C类192.168.0.0~192.168.255.255
- Java中的抽象
什么是抽象类? 如果一个类没有足够的信息去描述一个具体的对象,那么这样的类我们就称它为抽象类.这很好理解,就如同动物是一个很广泛的概念,由于在动物这个类里,我们无法用很详细的信息去描述狗狗这个具体的对 ...