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>
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);来增加数据 } }
现在就可以使用这个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(); } } }
然后运行,我们会发现SQL Server中已经生成了MySales这个数据库了。同时下面还生成了一个名字为UserInfo的表。同时表中还插入了一条数据。
----------------------------------------------
下面是最新的做做的一个Demo 使用三层
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(); } } }
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); } } }
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 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; } } }
原文:http://www.cnblogs.com/qq260250932/p/7789088.html