zoukankan      html  css  js  c++  java
  • EF开发模式之Code First

    EF开发模式之Code First

    Code First顾名思义,代码为先。首先编写完相关的实体类及DbContext派生类,然后通过映射关系自动在数据库中完成数据库表的创建。
    本例中创建一个班级和学生的管理,主要有班级类MyClass和学生类Student。其中班级类MyClass中可包含多名学生Student,两者之间是一对多的引用关系。
    (如果在实现过程中遇到问题,可查看本文最后的标注)

    一、环境准备

    • 开发环境:.NET Core 3.1
    • IDE工具:Visual Studio 2019
    • 数据库:SQL Server 2012

    二、添加包引用

    需要以下包的引用:
    Microsoft.EntityFrameworkCore
    Microsoft.EntityFrameworkCore.SqlServer
    Microsoft.EntityFrameworkCore.Design
    可通过dotnet cli命令行或VS的nuget包管理器实现相关包的添加。此处以dotnet cli命令行添加Design包为例。在项目根目录打开命令行,执行dotnet add package {要引用的包}即可。

    例子: dotnet add package Microsoft.EntityFrameworkCore.Design

    三、编程程序代码

    1.实体类代码

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.ComponentModel.DataAnnotations;
    
    namespace efc1.Models
    {
    	public class MyClass
    	{
    		[Key]
    		[MaxLength(10)]
    		public string ClassNo { get; set; }
    
    		[MaxLength(50)]
    		[Required]
    		public String ClassName { get; set; }
    
    		public  IList<Student> students { get; set; }
    	}
    }
    

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.ComponentModel.DataAnnotations;//对Model字段进行注解需要引用该类库;
    using System.ComponentModel.DataAnnotations.Schema;
    
    namespace efc1.Models
    {
    	public class Student
    	{
    		[Key]
    		[StringLength (10)]
    		public String StuNo { get; set; }
    
    		public String StuName { get; set; }
    
    		public String Gender { get; set; }
    
    		public DateTime  Birthday { get; set; }
    
    		//外键相关
    		public String ClassNo { get; set; }//ClassNo属性,是Student类中的外键,与MyClass类相对应。
    
    		[ForeignKey("ClassNo")]//ForeignKey特性,需引用System.ComponentModel.DataAnnotations.Schema;
    
    		public  MyClass MyClass { get; set; }
    	}
    }
    

    2.DbContext派生类代码

    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.EntityFrameworkCore;
    
    namespace efc1
    {
    	public class MyDBContext:DbContext
    	{
    		//定义针对Student的DbSet集合;
    		public DbSet<Models.Student> Students { get; set; }
    		public DbSet<Models.MyClass> MyClasses { get; set; }
    
    		//对Dbcontext进行初始化配置操作
    		protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    		{
    			string connString = "Data Source = .; Initial Catalog=text;Integrated Security=True";
    			optionsBuilder.UseSqlServer(connString);//指定使用sql server提供程序,并设置连接字符串;
    
    		}	
    	}
    }
    

    四、创建迁移并更新数据库

    1.通过命令行方式,在项目根目录执行命令:dotnet ef migrations add Test,创建名为Test的迁移任务(执行此步骤时需要将VS保存并关闭后,再在项目根目录执行命令);
    命令执行成功后,在项目中会自动产生一个Migrations文件夹,其中自动生成的CSharp代码文件就是用于更新数据库的。

    dotnet ef migrations add Test

    2.继续执行命令:dotnet ef database update,根据项目中的实体映射关系,更新数据库(包括表结构、表直接的关系)。

    dotnet ef database update

    标注

    【注】若命令行提示“dotnet ef命令无法使用”的错误,我们可通过以下命令,先安装对应的命令工具(其中version 3.1.1,需与开发者系统中安装的.net core版本保持一致)。
    dotnet tool install --global dotnet-ef --version 3.1.1

    【注】如果出现以下错误请如此解决:

    本博客所有内容均为学习日记,如有错误,烦请指正;如有侵权,请联系作者删除。 有关文章内容方面,请尽情留言,大家相互探讨
  • 相关阅读:
    poj2263
    poj2304
    低调是态度,也是智慧
    股票操作記錄2
    治病記錄(2013年)
    过年了
    治病記錄
    近段時間學習記錄
    新的一年
    關于設計
  • 原文地址:https://www.cnblogs.com/nvyuan/p/12322772.html
Copyright © 2011-2022 走看看