码迷,mamicode.com
首页 > 其他好文 > 详细

Entity Framework 实体数据模型——Code First

时间:2020-11-18 13:18:47      阅读:11      评论:0      收藏:0      [点我收藏+]

标签:数据库名   应用   文件夹   data   对象属性   lib   linq   查询   system   

    之前大致总结了下EF 设计器的概念和实战操作,接下来来总结下 Code First 构建的实体数据模型。

  EF 设计器创建实体数据模型文件(.emdx)整合 Entity Framework,并通过 DBContext 和 DbSet 类来实现支持数据库功能的开发,

  然而实体数据模型的构建与维护并不容易,难以应付开发大型的商业应用所需。因此,Entity Framework 在后续版本推出了Code First

  开发模式,以相对简单明了的类设计取代了EF 设计器构建的实体数据模型文件(.emdx)。

 

  一、传统数据类对象

    Code First 通过典型的传统类对象(Plain Old ClassObject,POCO)映射到数据结构,简化了 EF 的开发过程,开发人员

    只需创建DbContext 和 DbSet 继承的对象,EF 会自动处理其中的转换细节。与 EF 设计器 相比,Code First 只保留了原来

    edmx实体数据模型文件中的 DBContext、DbSet派生文件。

    无论是从数据库生成模型,还是从模型创建数据库,EF 一旦确认DbSet 对象属性与数字表字段结构间的映射正确,便会自动

    维护数据查询变动等的相关操作。

  二、创建项目

    创建一个控制台应用程序的项目,项目名称为:CodeFirstProject 

    技术图片

    然后选择项目 ==> 单击鼠标右键 ==> 选择 管理NuGet程序包 ==> 选择 浏览 页签 ==> 在搜索框输入 回车搜索 ==> 点击 安装

    动态图在这儿:

    技术图片

    接着在项目中添加一个名为 Model 的文件夹,并在该文件夹中添加两个类文件:Student.cs 和 StudentInfoModel.cs 。

    技术图片

     Student 类中定义以下属性:

      public class Student
      {
          public int Id { get; set; }
          public string Name { get; set; }
          public int Age { get; set; }
          public bool Sex { get; set; }
          public string Hobby { get; set; }
          public DateTime Birthday { get; set; }
          public decimal Tuition { get; set; }
      }

     StudentInfoModel 类需要继承 DbContext,并定义 Students 属性:

      using System.Data.Entity;

      namespace CodeFirstProject.Model
      {
          public class StudentInfoModel : DbContext  //继承了 DbContext  
          {
              public DbSet<Student> Students { get; set; }
          }
      }

    接下来,我们需要在Main 方法中实例化 StudentInfoModel,并获取 Students 属性的总数:

      using CodeFirstProject.Model;
      using System;
      using System.Linq;

      namespace CodeFirstProject
      {
          class Program
          {
              static void Main(string[] args)
              {
                  StudentInfoModel stuModel = new StudentInfoModel();
                  int stuCount = stuModel.Students.Count();
                  Console.WriteLine(stuCount);
                  Console.Read();
              }
          }
      }

       第一次执行程序时,SQL Express 会自动创建名为 CodeFirstProject.Model.StudentInfoModel 的数据库,

    并创建了 Student 表,结构由 Student 类文件中配置的属性决定。我们可以通过 "SQL Server 对象资源管理器"(可在 视图 菜单下找到)

    来查看程序自动生成的数据库:

    技术图片

    我们可以通过查看数据库的属性,来找到程序创建的数据库所在的目录:

    选中数据库 ==> 单击鼠标右键 ==> 属性

    技术图片

       数据库连接:

    如果不在 StudentInfoModel 类中指定数据库的连接信息,SQL Express 将会创建所需的数据库。

    而在实际开发中,通常我们会通过连接字符串的设置来自行创建所需的数据库。

    首先,我们需要在 StudentInfoModel 类中添加一个构造函数,并配置数据库的连接名称:

      using System.Data.Entity;
      namespace CodeFirstProject.Model
      {
          public class StudentInfoModel : DbContext
          {
        
              public StudentInfoModel() : base("name=StuInfoModelConnection") //添加构造函数,并配置数据库的连接名称
              {

              }

              public DbSet<Student> Students { get; set; }
          }
      }

    其次打开 App.config 文件,在 configuration 节点中添加如下内容:

      <connectionStrings>
            <!--DataDirectory 表示数据库路径的替换字符串。-->
            <add name="StuInfoModelConnection" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;
                                        AttachDbFilename=|DataDirectory|CodeFirstProjectModel.mdf;                                         Integrated Security=True;Connect Timeout=30;
                                        MultipleActiveResultSets=True;App=EntityFramework"

                                        providerName
="System.Data.SqlClient"/> </connectionStrings>

    第三步,在项目的 \bin\Debug 目录下创建数据库文件:

    技术图片

     特别注意:App.config 中配置的数据库名称,需要和创建时的数据库名称保持一致哦!!!

    技术图片

     最后,可以通过添加现有项的方式,把数据库拷贝到项目的根目录:

    技术图片

    App.config 文件的连接配置也要相应的调整下,才能使用根目录中的数据库文件哟!

      <connectionStrings>
            <!--将 AttachDbFilename=|DataDirectory|CodeFirstProjectModel.mdf; 这个配置替换成 
          Initial Catalog=CodeFirstProjectModel; 这个就好了!
--> <add name="StuInfoModelConnection" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;                                         Initial Catalog=CodeFirstProjectModel;                                         Integrated Security=True;Connect Timeout=30;
                                        MultipleActiveResultSets=True;App=EntityFramework"

                                        providerName
="System.Data.SqlClient"/> </connectionStrings>

     好了,在空白项目中使用 Code First 创建程序, EF 会自动完成其中与数据库的互动细节。

    与 EF 设计器相比,Code First 直接采用类取代 EMD 文件,内容更为简洁,而实体类与数据库

    底层数据结构的映射设置由惯例原则、属性标记以及 Fluent API 等程序设置的方式来取代 XML

    格式的 SSDL、CSDL与MSL设置。

   














Entity Framework 实体数据模型——Code First

标签:数据库名   应用   文件夹   data   对象属性   lib   linq   查询   system   

原文地址:https://www.cnblogs.com/LittleBai/p/13959476.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!