【EF系列】CodeFirst代码优【转】

一、前言

      前文中介绍了ModelFirst,他是先自己做好实体模型,然后生成数据库。现在小编给大家再介绍一种——CodeFirst,代码优先。

二、内容介绍

      Code First 这种方式需要先写一些代码,如实体对象,数据关系等,然后根据已有的代码描述,自动创建数据对象。但其实这种方法与Model First是非常类似的。我们自己写的代码,其实就是用代码表示实体模型,而Model First是用可视化的方式描述了实体模型。 
      下面通过实战演练来展示:

三、实战演练

打开VS2012 ,建立一个控制台应用程序:

这里写图片描述
这里写图片描述

                                                    图一 控制台应用程序
  • 1
  • 2

使用这种方式前提是要有EF的引用:右击引用,选择“管理Nuget程序包”,打开对话框。

这里写图片描述

                                                    图二 添加EF引用                                               
  • 1
  • 2

选择联机搜索,输入EntityFramework,搜索出来后,点击安装。

这里写图片描述

                                                    图三 添加EF引用                                                                                       
  • 1
  • 2

安装完后的效果:

这里写图片描述

                                                    图四 安装完后的效果      
  • 1
  • 2

这样我们的前期准备工作就结束了,接下来就是代码编写的部分:

首选我们创按两个类:User、Card。

User实体类:

/*********************************************************************
 * 作者:王雷
 * 小组:暂无
 * 说明:用户表类
 * 创建日期:201651814:41:18
 * 版本号:V1.0.0
 ************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;

namespace EFCodeFirst
{
    public class User
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

Card实体类:

/*********************************************************************
 * 作者:王雷
 * 小组:暂无
 * 说明:卡实体类
 * 创建日期:201651814:41:21
 * 版本号:V1.0.0
 ************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;

namespace EFCodeFirst
{
    public class Card
    {
        [Key]
        public int Id { get; set; }
        public string CardName { get; set; }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

接着我们创建上下文类:CodeFirstContext,它继承于DbContext类。写一下这个类的构造函数,将Value传进去,Value就是配置文件中链接数据库的代码以及一个关于驱动的代码,要注意其中的对应关系,最后把实体放到集合就可以了。

/*********************************************************************
 * 作者:王雷
 * 小组:暂无
 * 说明:上下文
 * 创建日期:201651815:06:49
 * 版本号:V1.0.0
 ************************************************************************/
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EFCodeFirst
{
    public class CodeFirstContext : DbContext
    {
        //构造函数
        public CodeFirstContext()
            : base("name = DEMO")
        { 
        }
        public DbSet<User> User { get; set; }
        public DbSet<Card> Card { get; set; }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

配置文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <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=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <!--这是自己添加的代码-->
  <connectionStrings>
    <add name="DEMO" connectionString="Data Source=.;Initial Catalog=EFCodeFirst;Integrated Security=True;" providerName="System.Data.SqlClient"/>
  </connectionStrings>
</configuration>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

主函数中创建一个数据库,添加数据,测试成果:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EFCodeFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建上下文
            CodeFirstContext dbcontext = new CodeFirstContext();
            //创建数据库
            dbcontext.Database.CreateIfNotExists();
            //创建表,并将字段加入进去
            User u = new User();
            u.Name = "wang";
            u.Id = 1;
            Card c = new Card();
            c.CardName = "lei";
            c.Id = 1;
            //将实体赋予上下文,并添加到表里
            dbcontext.User.Add(u);
            //保存
            dbcontext.SaveChanges();
            Console.WriteLine("成功创建数据库和表");
            Console.ReadKey();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

执行程序,结果如下:

这里写图片描述

                                                    图五 结果如下
  • 1
  • 2

生成的数据库:

这里写图片描述

                                                    图六 生成的数据库
  • 1
  • 2

四、小结

      建立一个控制台项目。通过Nuget来获取Entity Framework。可以看出微软为我们建立的底层的框架还是蛮有用的,非常方便。希望小编的对这几种方式能对您有所启发。到这里为止呢~小编就为大家介绍完了EF的三种情况,在后面的博客中会给大家介绍一下在使用EF映射中会出现的问题。敬请期待~~

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kisscatforever/article/details/51442449

猜你喜欢

转载自blog.csdn.net/cyd411/article/details/80775782