• 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>节点下。这三个节点就是:

    1. <?xml version="1.0" encoding="utf-8"?>  
    2.   
    3. <!--  
    4.   有关如何配置 ASP.NET 应用程序的详细信息,请访问  
    5.   http://go.microsoft.com/fwlink/?LinkId=169433  
    6.   -->  
    7.   
    8. <configuration>  
    9.     
    10.   <!--要将以下个3节点加入到Web.config文件中来;当然 <system.web>这个节点本身就存在的-->  
    11.   <configSections>  
    12.     <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->  
    13.     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />  
    14.   </configSections>  
    15.   <system.web>  
    16.     <compilation debug="true" targetFramework="4.5" />  
    17.     <httpRuntime targetFramework="4.5" />  
    18.   </system.web>  
    19.   <connectionStrings>  
    20.     <!--如果从别处拷贝过来的话,这需要将connectionString的值修改成我们自己需要的连接字符串。如果是使用的ADO.NET的话还需要将providerName的值修改成providerName="System.Data.SqlClient"-->  
    21.     <add name="ConnStr" connectionString="server=.;database=MySales ;uid=sa;pwd=123456;" providerName="System.Data.SqlClient" />  
    22.   </connectionStrings>  
    23.   <entityFramework>  
    24.     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">  
    25.       <parameters>  
    26.         <parameter value="v11.0" />  
    27.       </parameters>  
    28.     </defaultConnectionFactory>  
    29.   </entityFramework>  
    30. </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.   
    8. namespace CodeFirstEF.EFlib  
    9. {  
    10.     //BaseDbContext类继承了BaseDbContext类后,它就是一个上下文容器类了  
    11.     public class BaseDbContext:DbContext  
    12.     {  
    13.         //这个类将来要被实例化的,实例化应该初始化ADO.NET的连接字符串,所以这里调用父类一个带参数的构造函数,指明去Web.config文件去<connectionStrings>节点下找到Name为ConnStr的节点值去初始化这个ADO..NET连接字符串  
    14.         public BaseDbContext() : base("name=ConnStr")  
    15.         {  
    16.             //告诉EF容器,如果没有ConnStr连接字符串中配置的数据库,则自动创建这个数据库。(我们ConnStr连接字符串中配置的数据库名字叫MySales,如果我们SQL Server中不存在这个MySales数据库则自动创建这个数据库)  
    17.             base.Database.CreateIfNotExists();  
    18.           
    19.         }  
    20.   
    21.         //public DbSet<UserInfo> UserInfo{get;set;} //可建立这个属性,也可以不建立,如果不建立的时候,直接使用db.Set<UserInfo>().Add(model);来增加数据  
    22.     }  
    23. }  
    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.   
    8.   
    9. namespace CodeFirstEF  
    10. {  
    11.     using CodeFirstEF.EFlib;  
    12.     using CodeFirstEF.Model;  
    13.     public partial class WebForm1 : System.Web.UI.Page  
    14.     {  
    15.         protected void Page_Load(object sender, EventArgs e)  
    16.         {  
    17.             BaseDbContext db = new BaseDbContext();  
    18.   
    19.             UserInfo model = new UserInfo() {UserName = "小肚子", Age = 103 };  
    20.   
    21.             //db.UserInfo.Add(model);//或者采用下面的方式  
    22.             db.Set<UserInfo>().Add(model);  
    23.   
    24.             db.SaveChanges();  
    25.         }  
    26.     }  
    27. }  
    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.   
    8. namespace WebApp  
    9. {  
    10.     using BLL;  
    11.     using Models;  
    12.     public partial class WebForm1 : System.Web.UI.Page  
    13.     {  
    14.         protected void Page_Load(object sender, EventArgs e)  
    15.         {  
    16.             T_UserInfoBll bll = new T_UserInfoBll();  
    17.             
    18.   
    19.             T_UserInfo user = new T_UserInfo() { Name = "张三丰", Age = 105 };  
    20.             bll.AddData(user);  
    21.   
    22.             var b = bll.QueryWhere(r => r.Age > 10);  
    23.             this.GridView1.DataSource = b;  
    24.             GridView1.DataBind();  
    25.         }  
    26.     }  
    27. }  
    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.   
    7. namespace BLL  
    8. {  
    9.     using DAL;  
    10.     using Models;  
    11.     public class T_UserInfoBll  
    12.     {  
    13.           
    14.         public List<T_UserInfo> QueryWhere(System.Linq.Expressions.Expression<Func<T_UserInfo, bool>> where)  
    15.         {  
    16.             T_UserInfoDal dal = new T_UserInfoDal();  
    17.             return dal.QueryWhere(where);  
    18.         }  
    19.   
    20.         public bool AddData(T_UserInfo model)  
    21.         {  
    22.             T_UserInfoDal dal = new T_UserInfoDal();  
    23.             return  dal.AddData(model);  
    24.         }  
    25.     }  
    26. }  
    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.   
    7. namespace DAL  
    8. {  
    9.     using Models;  
    10.     public class T_UserInfoDal  
    11.     {  
    12.         public List<T_UserInfo> QueryWhere(System.Linq.Expressions.Expression<Func<T_UserInfo, bool>> where)  
    13.         {  
    14.             BaseDbContext db = new BaseDbContext();  
    15.             return db.T_UserInfo.Where(where).ToList();  
    16.         }  
    17.   
    18.         public bool AddData(T_UserInfo model)  
    19.         {  
    20.             BaseDbContext db = new BaseDbContext();  
    21.             db.T_UserInfo.Add(model);  
    22.             int isOK = db.SaveChanges(); //返回数据是:已写入基础数据库的对象的数目。  
    23.             return isOK>0;  
    24.         }  
    25.     }  
    26. }  
    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.   
    4. using System.Linq;  
    5. using System.Text;  
    6. using System.Threading.Tasks;  
    7.   
    8. namespace Models  
    9. {  
    10.     using System.ComponentModel.DataAnnotations;  
    11.     public class T_UserInfo  
    12.     {  
    13.         [Key] //因为这里我们并没有直接添加EF,所以意味着这里没有映射实体类的元数据了。所以这里我们要手动的标注主键  
    14.         public int id { get; set; }  
    15.   
    16.         public string Name { get; set; }  
    17.   
    18.         public int Age { get; set; }  
    19.     }  
    20. }  
    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; }
        }
    }
    

                

                版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    为linux命令添加别名
    ubuntu安装mongodb
    mysql保存中文乱码问题
    公倍数
    复制网站内容
    孪生素数
    迷宫问题
    递归连续数
    排列平方数
    基因牛
  • 原文地址:https://www.cnblogs.com/qq260250932/p/7789088.html
Copyright © 2020-2023  润新知