不会使用 EF Core 的 Code First 模式?来看看这篇文章,手把手地教你

这篇具有很好参考价值的文章主要介绍了不会使用 EF Core 的 Code First 模式?来看看这篇文章,手把手地教你。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

不会使用 EF Core 的 Code First 模式?来看看这篇文章,手把手地教你

EF Core Code First 是什么

Code First 是 Entity Framework Core (简称 EF Core) 的一种开发模式,它允许开发人员使用纯粹的代码来定义数据模型,通过它,可以极大地提高开发效率:

  1. 使用 Code First 开发模式,你可以专注于定义领域模型和业务逻辑,而无需关注数据库的细节,能够更快地构建应用程序
  2. Code First 是真正地面向对象的方式来定义数据模型,包括实体类、关系、继承等,这些都让数据模型的设计更加直观和易于理解
  3. Code First 支持多种数据库,包括 SQL Server、MySQL、PostgreSQL 等,你可以在不同的数据库之间进行切换而无需修改代码
  4. Code First 提供了数据库迁移工具,可以根据模型变化自动创建、更新和维护数据库模式,数据库的版本控制和迁移变得更加容易,也减少了手动编写 SQL 脚本的工作量

Step By Step 使用 Code First 步骤

  1. 创建一个 asp.net core Console 项目
  2. 从 Nuget 安装以下包

    Microsoft.EntityFrameworkCore.SqlServer
    Microsoft.EntityFrameworkCore.Tools

  3. 创建实体类 Article 和 Comment
    public class Article
    {
    	/// <summary>
    	/// 主键
    	/// </summary>
    	public long Id { get; set; }
    
    	/// <summary>
    	/// 标题
    	/// </summary>
    	public string Title { get; set; }
    
    	/// <summary>
    	/// 内容
    	/// </summary>
    	public string Content { get; set; }
    
    	/// <summary>
    	/// 此文章的若干条评论
    	/// </summary>
    	public List<Comment> Comments { get; set; } = new List<Comment>(); 
    }
    
    public class Comment
    {
    	public long Id { get; set; }
    	public Article Article { get; set; }
    	public long ArticleId { get; set; }
    	public string Message { get; set; }
    }
    
  4. 创建实现了IEntityTypeConfiguration接口的实体类的配置类,用于配置实体类和数据库表的对应关系
    using Microsoft.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore.Metadata.Builders;
    
    // IEntityTypeConfiguration的泛型参数类指定这个类要对实体类 Article 进行配置
    class ArticleConfig : IEntityTypeConfiguration<Article>
    {
    	// 使用Fluent API的方式对实体类进行配置
    	// 也可以在实体类中使用 Data Annotation 进行配置,但那样耦合太深,不推荐使用
    	public void Configure(EntityTypeBuilder<Article> builder)
    	{
    		
    		// 表示这个实体类对应数据库中名字为T_Articles的表
    		builder.ToTable("T_Articles");
    		builder.Property(p => p.Content).IsRequired().IsUnicode();
    		builder.Property(p => p.Title).IsRequired().IsUnicode()
    			.HasMaxLength(255);
    	}
    }
    
    class CommentConfig : IEntityTypeConfiguration<Comment>
    {
    	public void Configure(EntityTypeBuilder<Comment> builder)
    	{
    		builder.ToTable("T_Comments");
    
    		// 一条评论对应一篇文章,一篇文章有多条评论
    		builder.HasOne<Article>(c =>c.Article)
    			.WithMany(a => a.Comments)
    			.IsRequired()
    			.HasForeignKey(c => c.ArticleId);
    		builder.Property(p=>p.Message).IsRequired().IsUnicode();
    	}
    }
    
  5. 创建一个继承自DbContext类的TestDbContext类(上下文类)
    using Microsoft.EntityFrameworkCore;
    
    class TestDbContext: DbContext
    {
    	public DbSet<Article> Articles { get; set; }
    	public DbSet<Comment> Comments { get; set; }
    
    	protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    	{
    		string connStr = "Server=(localdb)\\mssqllocaldb;Database=TestDB;Trusted_Connection=True;MultipleActiveResultSets=true";
    		optionsBuilder.UseSqlServer(connStr);
    	}
    
    	protected override void OnModelCreating(ModelBuilder modelBuilder)
    	{
    		base.OnModelCreating(modelBuilder);
    
    		// 表示加载当前程序集中所有实现了IEntityTypeConfiguration接口的类
    		modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
    	}
    }	
    
  6. 迁移(根据实体类生成数据库表)
    1. 打开 菜单 - 工具 - 程序包管理器控制台
    2. 默认项目下拉框选择目标项目【可选,如果解决方案有多个项目】
    3. 执行如下命令:

      Add-Migration InitialCreate 【InitialCreate 名字可随意取,有意义就好】
      说明:Add-Migration命令会自动在项目的Migrations文件夹中生成C#代码

    4. 执行命令

      Update-database
      说明:编译并且执行数据库迁移代码文章来源地址https://www.toymoban.com/news/detail-760683.html

    5. 查看 sql server 数据库是否执行成功
    6. 如果添加或修改字段,重复执行3~4步命令
  7. 至此,EF Core 的 Code First 过程已经完成,接着就可以对数据进行增删改查等操作

扩展 - Fluent API 基本语法例子

  1. 视图与实体类映射
    modelBuilder.Entity<Blog>().ToView("blogsView");
    
  2. 排除属性映射
    modelBuilder.Entity<Blog>().Ignore(b => b. Name2);
    
  3. 数据库表列名
    modelBuilder.Entity<Blog>().Property(b =>b.BlogId).HasColumnName("blog_id");
    
  4. 列数据类型
    builder.Property(e => e.Title) .HasColumnType("varchar(200)")
    
  5. 主键
    modelBuilder.Entity<Student>().HasKey(c => c.Number);
    
  6. 索引
    modelBuilder.Entity<Blog>().HasIndex(b => b.Url);
    
    // 复合索引
    modelBuilder.Entity<Person>().HasIndex(p => new { p.FirstName, p.LastName });
    
  7. 多对多
    builder.HasMany<Teacher>(c => c.Teachers).WithMany(t => t.Students)
    	.UsingEntity(j => j.ToTable("T_Students_Teachers"));
    
  8. 1对多
    builder.HasOne<Article>(c =>c.Article)
    	.WithMany(a => a.Comments)
    	.IsRequired()
    	.HasForeignKey(c => c.ArticleId);
    
  9. 1对1
    builder.HasOne<Delivery>(c => c.Delivery).WithOne(d => d.Order)
    	.HasForeignKey<Delivery>(d => d.OrderId);

到了这里,关于不会使用 EF Core 的 Code First 模式?来看看这篇文章,手把手地教你的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用EF Core创建webapi接口(二)

    有错误欢迎大家给我指正 说明:netcore webapi+net6+EF Core版本,codefirst模式(代码创建数据库) 1.netcore webapi+net6+EF Core版本,dbfirst模式(代码生成数据库)见:使用EF Core创建webapi接口(一)-CSDN博客 2.netcore webapi+net6+EF Core+vue前后端联动版本,见netcore webapi+net6+EF Core+vue3前后端联动-CSD

    2024年02月21日
    浏览(36)
  • Net Core中使用EF Core连接Mysql数据库

    Entity Framework Core的前身是微软提供并主推的ORM框架,简称EF,其底层是对ADO.NET的封装。EF支持SQLServer、MYSQL、Oracle、Sqlite等所有主流数据库。 首先是使用时的几个模式的整理及其理解: Code First:根据代码自动创建数据库表结构甚至是数据库,可以支持多库开发,代码较少冗余

    2024年01月24日
    浏览(41)
  • 如何在 EF Core 中使用乐观并发控制

    乐观并发控制是一种处理并发访问的数据的方法,它基于一种乐观的假设,即认为并发访问的数据冲突的概率很低。在乐观并发控制中,系统不会立即对并发访问的数据进行加锁,而是在数据被修改时,再检查是否有其他并发操作已经修改了数据。如果检测到冲突,系统 再采

    2024年02月04日
    浏览(32)
  • tmux 使用看这一篇文章就够了

    tmux是一个终端复用工具,允许用户在一个终端会话中同时管理多个终端窗口,提高了终端使用效率,尤其在服务器上进行远程管理时更加实用。在tmux中,可以创建多个终端窗口和窗格,并在这些窗口和窗格之间自由切换,还可以在后台运行会话,即使在终端断开连接后也可

    2024年02月02日
    浏览(44)
  • ASP.NET Core Web API入门之三:使用EF Core

    一般来讲我们做项目都会用实体类跟数据库实体进行关系对应,这样的好处方便我们维护、增删改查,并且可以减少SQL的编写,从而统一风格,那么 Entity Framework Core 就是很不错的ORM框架。 1、跨数据库支持能力强大,只需修改配置就可以轻松实现数据库切换。 2、提升了开发效

    2024年02月10日
    浏览(42)
  • EF.Core 使用Linq的Contact联合查询问题

    在.net Core 5 WebAPI 项目中应用 EF Core 5 实体框架,使用Linq的Contact联合进行多表查询。 定义两个子查询语句,查询结果 select 返回的对象结构类型都是一致的。 Linq查询结果集封装对象类: DatingComplaint 实体类映射(Fluent API): 但在执行到 ToListAsync() 代码行查询返回结果时,抛

    2024年02月13日
    浏览(31)
  • .NET使用一行命令轻松生成EF Core项目框架

    dotnet ef是Entity Framework Core(EF Core)的一个命令行工具,用于管理EF Core应用程序的数据库和代码。除了提供管理数据库的命令之外,dotnet ef还可以生成和管理实体和上下文代码。本文将介绍如何使用dotnet ef动态生成代码。 一、环境准备 1、项目准备 用vs2022新建一个.NET6的asp.

    2023年04月27日
    浏览(40)
  • 干货|工作中要使用Git,看这篇文章就够了

    本文将从 Git 入门到进阶、由浅入深,从常用命令、分支管理、提交规范、vim 基本操作、进阶命令、冲突预防、冲突处理等多方面展开,足以轻松应对工作中遇到的各种疑难杂症,如果觉得有所帮助,还望看官高抬贵手给个赞呗,感谢! 虽说现在工作中使用 Git 都会用一些图

    2023年04月25日
    浏览(26)
  • NET8 ORM 使用AOT SqlSugar 和 EF Core

    .Net8的本地预编机器码NET AOT,它几乎进行了100%的自举。微软为了摆脱C++的钳制,做了很多努力。也就是代码几乎是用C#重写,包括了虚拟机,GC,内存模型等等。而需要C++做的,也就仅仅是引导程序,本篇通过代码来看下这段至关重要的引导程序的运作模式。      SqlSugar已经

    2024年02月05日
    浏览(39)
  • .net core 创建WebAPI以及使用EF DBFirst框架使用方法与疑问解答(.net 6)

    EF语法包: 生成实体模型: 修改实体模型: 把生成的实体和上下文都输出到某个文件夹命令 增加JSON格式脚手架: 若想增加某个版本json脚手架,需要加入后缀如: 问题与解决方案: 1、问题: Your startup project \\\'XXX\\\' doesn\\\'t reference Microsoft.EntityFrameworkCore.Design. This package is requi

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包