4.1EF Core

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

4.1EF Core

EF Core是微软官方的ORM框架,ORM即对象关系映射,也就是我们可以直接操作C#中的对象就可以完成数据库的操作。

EF Core环境搭建

  1. 首先要创建C#对象,用以对应数据库中的表,该C#对象也成为实体类。
public class Book
{
    //必须是属性
    public long Id { get; set; }//主键
    public string Title { get; set; }//标题
    public DateTime PubTime { get; set; }//发布日期
    public double Price { get; set; }//单价
    public string AuthorName { get; set; }//作者名字
}
  1. 根据所用的数据库选择NuGet包,本文使用SQLite数据库,所以安装Microsoft.EntityFrameworkCore.Sqlite。

  2. 需要实现一个配置类,用来说明实体类和数据库表是怎么映射的,该配置类要实现IEnityTypeConfiguration接口。

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

class BookEntityConfig : IEntityTypeConfiguration<Book>  //指定是对那个类进行配置
{
    public void Configure(EntityTypeBuilder<Book> builder) //实现接口
    {
        builder.ToTable("T_Books"); //实体对象在数据库中表的名字是“T_Books”
        //没有详细设置每个属性在数据库中的列明和数据类型
        //会默认吧属性名字作为列明,并根据属性类型来推断数据库中的数据类型
        
        //可以根据需要修改实体类的配置,进而修改数据库的表
        //HasMaxLength(50):最大长度为50 IsRequired():不可为空
        builder.Property(e => e.Title).HasMaxLength(50).IsRequired();
        builder.Property(e => e.AuthorName).HasMaxLength(20).IsRequired();
    }
}
  1. 创建数据访问类,即上下文类。必须实现DbContext接口。
using Microsoft.EntityFrameworkCore;
class TestDbContext : DbContext
{
    public DbSet<Book> Books { get; set; } //可对上文的Book实体进行操作
    //配置数据库的连接
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=MySqLite.db");
        optionsBuilder.LogTo(Console.WriteLine);
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        //设置需要加载的程序集
        //加载当前程序集中所有实现了IEntityTypeConfiguration接口的类
        modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
    }
}

到此,EF Core的环境搭建完成,总结一下,目前还没有数据库只是定义了实体对象, EF Core会根据我们定义的实体对象自动生成数据库,这种操作也被称之为迁移(migration)

  1. 目前只是实体对象创建完成,但是还没有在数据库中生成相应的表。安装Nuget包Microsoft.EntityFrameworkCore.Tools。
  2. 在程序包管理器控制台中执行Add-Migration 自定义名称,这个一个迁移命令,建议名称是有意义的。

会自动在项目下生成Migrations文件夹,文件夹下生成相应的代码,其中名称为日期ID号_自定义名称的类,其主要功能是创建数据库。

  1. 以上只是创建了生成数据库的类,但并没有执行。在程序包管理器控制台中使用Update-database执行数据库迁移代码。

续:

  1. 如果此时修改了BookEntityConfig中属性设置,需要再次执行一次Add-Migration 自定义名称,此时名称要和之前的不一样。
  2. 再次执行Update-database

数据的增删改查

插入数据
//要使用using,使用完成后释放
using TestDbContext ctx = new TestDbContext();
//也是C#新语法,在创建的时候直接定义属性
var b1 = new Book
{
    AuthorName = "杨中科",
    Title = "零基础趣学C语言",
    Price = 59.8,
    PubTime = new DateTime(2019, 3, 1)
};
var b2 = new Book
{
    AuthorName = "Robert Sedgewick",
    Title = "算法(第4版)",
    Price = 99,
    PubTime = new DateTime(2012, 10, 1)
};
ctx.Books.Add(b1);
ctx.Books.Add(b2);
//以上部分只是修改了内容中的数据,需要使用save方法保存在数据库中,推荐使用异步方法
await ctx.SaveChangesAsync();
查询数据

可以使用LinQ对DbSet进行数据查询。

using TestDbContext ctx = new TestDbContext();

var books = ctx.Books.Where(b => b.Price > 80);
var booksOrder = ctx.Books.OrderBy(b => b.Price);//按照价格排序
var booksGroup = ctx.Books.GroupBy(b => b.AuthorName).Select(g => new { AuthorName = g.Key, booksCount = g.Count(), MaxPrice = g.Max(b => b.Price) });//分组后处理,利用了匿名类
修改和删除数据
using TestDbContext ctx = new TestDbContext()var b = ctx.Books.Single(b => b.Title == "数学之美");
b.AuthorName = "Jun Wu";
await ctx.SaveChangesAsync();

//删除
var b = ctx.Books.Single(b => b.Title == "数学之美");
ctx.Remove(b);//也可以写成ctx.Books.Remove(b);
await ctx.SaveChangesAsync();

**注意:**无论是修改还是删除,都要先执行数据的查询,最后需要保存。文章来源地址https://www.toymoban.com/news/detail-449211.html

到了这里,关于4.1EF Core的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • EF Core入门

    EF Core是微软官方提供的ORM框架。EF Core不仅可以操作Microsoft SQL Server、MySQL、Oracle、PostgreSQL等数据库,而且可以操作Azure Cosmos DB等NoSQL数据库 前提条件:已经完整安装了Microsoft SQL Server 下面是一个实际操作EF Core的演示 这是项目最终的目录,这里需要关注的就是 .cs 文件 首先新

    2023年04月09日
    浏览(32)
  • EF Core并发控制

    并发控制:避免多个用户同时操作资源造成的并发冲突问题。 最好的解决方案:非数据库解决方案 数据库层面的两种策略:悲观、乐观 悲观并发控制一般采用行锁 ,表锁等排他锁对资源进行锁定,确保同时只有一个使用者操作被锁定的资源。 EF Core没有封装悲观并发控制的

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

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

    2024年01月24日
    浏览(50)
  • EF Core + MySQL 基本增删改查

    基于EF Core + MySQL的基本增删改查,示例是基于.NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移项目基础上的内容增加。同时也是对基于Canal实现MySQL 8.0 数据库数据同步项目的验证。 Controllers----添加----控制器,选择api----包含读写操作的API控制器。 将上下文类注入到User

    2024年02月08日
    浏览(47)
  • EF Core 在实际开发中,如何分层?

    分层就是将 EF Core 放在单独的项目中,其它项目如 Asp.net core webapi 项目引用它 这样的好处是解耦和项目职责的清晰划分,并且可以重用 EF Core 项目 但是也会数据库迁移变得复杂起来 创建一个 .NET 类库项目,项目名字为 BooksEFCore 引用以下 Nuget 包 Microsoft.EntityFrameworkCore.Relati

    2024年01月24日
    浏览(44)
  • 使用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日
    浏览(44)
  • Ef Core花里胡哨系列(4) 多租户

    当然,我们要考虑设计问题,例如,切换 Schema 或者改变数据库时, Ef Core 同样也会刷新改实体的缓存,所以,首次查询将会很慢,不适合大表。 在我的上一篇博客中 [Ef Core花里胡哨系列(3) 动态修改实体对应的表(分表)、多租户] 中我们实现了如何分表,同理,我们可以用近

    2024年02月03日
    浏览(35)
  • EF Core预编译模型Compiled Model

    最近还在和 npgsql 与 EF Core 斗争,由于 EF Core 暂时还不支持 AOT,因此在 AOT 应用程序中使用 EF Core 时,会提示问题: 听这个意思,似乎使用 Compiled Model 可以解决问题,于是就又研究了一下 EF Core 的这个功能。 在 EF Core 中,模型根据实体类和配置构建,默认情况下,每次创建

    2024年02月05日
    浏览(42)
  • 如何在 EF Core 中使用乐观并发控制

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

    2024年02月04日
    浏览(40)
  • EF Core实操,数据库生成实体,迁移

    大家好,我是行不更名,坐不改姓的宋晓刚,下面将带领大家进入C#编程EF Core数据库基础入门知识,如何连接数据库,如何编写代码,跟上我的步伐进入EF Core数据库下的世界。 家人们,如果有什么不懂,可以留言,或者加我联系方式,一起进入微软技术的开拓。 微信:153

    2024年01月22日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包