EF| CodeFirst 代碼先行
阿新 • • 發佈:2017-11-06
task userinfo utf-8 void XML server rmi esp 繼承
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>節點下。這三個節點就是:
[html] view plain copy print?
- <?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上下文容器類
[csharp] view plain copy print?
- 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窗體
[csharp] view plain copy print?
- 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
[csharp] view plain copy print?
- 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
[csharp] view plain copy print?
- 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
[csharp] view plain copy print?
- 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
[csharp] view plain copy print?
- 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 代碼先行