EFCore学习(一)创建和修改表结构

EFCore的全称是Microsoft.EntityFrameworkCore

EFCore的作用主要体现在以下几个方面:

  1. 对象关系映射(ORM):EFCore通过对象关系映射,将数据库表映射为.NET对象,使得开发人员可以使用面向对象的方式来操作数据库,而不需要编写复杂的SQL查询语句。这极大地简化了数据访问层的开发过程,提高了开发效率。

  2. 跨数据库支持:EFCore支持多种关系数据库,如SQL Server、MySQL、SQLite、PostgreSQL等。通过简单的配置更改,可以轻松切换数据库提供程序,而不需要修改应用程序的代码。这种灵活性使得EFCore能够适应各种数据库环境。

  3. 自动迁移:EFCore提供了自动迁移功能,可以根据模型的变化自动更新数据库结构。这使得数据库的版本控制和升级变得更加容易。

  4. 异步查询:EFCore支持异步查询,这可以提高应用程序的性能和响应能力。在处理大量数据或需要长时间运行的查询时,异步查询可以有效地避免阻塞主线程,提高应用程序的并发性能。

  5. LINQ支持:EFCore通过集成LINQ(Language Integrated Query)提供了强大的查询功能。开发人员可以使用LINQ表达式来编写类型安全、直观的查询语句,这使得查询过程更加简洁和直观。

此外,EFCore还具有以下特点:

  • 轻量级和可扩展性:EFCore是一个轻量级的ORM框架,易于集成到项目中。同时,它也具有良好的可扩展性,可以根据项目的需求进行定制和扩展。

  • 支持多种开发环境:EFCore可以在Visual Studio、Visual Studio for Mac或Visual Studio Code等环境下开发,这使得开发人员可以根据自己的喜好和习惯选择适合的开发工具。


(一)创建表结构 


主要是三步:

1)创建实体类

2)创建配置类

3)创建dbContext


引用nuget包:

Microsoft.EntityFrameworkCore.SqlServer

Microsoft.EntityFrameworkCore.Tools

第1个包就是EFCore的功能包。

第2个包用于最后执行控制台指令 Update-Database 创建表的时候,如果没有它这个操作就会报错。


源码:

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

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }

    public class Person
    {
        public long id { get; set; }
        public string name { get; set; }
        public int Age { get; set; }
    }

    public class Book
    {
        public long Id { get; set; }   //主键
        public string Title { get; set; }   //标题
        public DateTime PubTime { get; set; }  //发布日期

        public double Price { get; set; } //单价
    }

    public class BookEntityConfig:IEntityTypeConfiguration<Book>
    { 
        public void Configure(EntityTypeBuilder<Book> builder) 
        {
            builder.ToTable("T_Books");
        }
    }

    public class PersonEntityConfig : IEntityTypeConfiguration<Person>
    {
        public void Configure(EntityTypeBuilder<Person> builder)
        {
            builder.ToTable("T_Persons");
        }
    }

    public class TestDbContext:DbContext
    {
        public DbSet<Book> Books { get; set; }
        public DbSet<Person> Persons { get; set; }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string connStr = "Server=.;Database=mytest;Trusted_Connection=True;MultipleActiveResultSets=true;Encrypt=false;";
            optionsBuilder.UseSqlServer(connStr);
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
        }
    }


}


“程序包管理器控制台”执行执行Add-Migration  init

进行数据表迁移动作。注意init这个相当于git里面的commit的注释字符串,要起有意义的名字。

image.png


执行成功后,会自动在你的项目里增加一些代码。

它们用于创建表结构。

image.png


“程序包管理器控制台”执行 Update-Database 创建表。

这个过程中,注意你的代码会被编译一次,如果有语法错误的话创建表过程会失败。

image.png


这一步可能会报下面的错误:

A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。)


解决方法是修改一下数据连接字符串:

注意最后的Encrypt=false 它可以解决问题。

Server=.;Database=mytest;Trusted_Connection=True;MultipleActiveResultSets=true;Encrypt=false;


成功后查看数据库表,可以看到增加了 T_Books和T_Persons。

image.png



(二)修改表结构 


1。修改实体类,增加属性

image.png

2。执行 Add-Migration addBrith

image.png

image.png


3。 执行Update-Database

image.png

观察数据库,已经成功添加了字段。

image.png


演示程序环境为: 

vs2022+ .net8.0 + SQLServer2012


链接:https://pan.baidu.com/s/1Ihq7gSs4L6o3cYrNXVJTVQ 

提取码:2zvw 

--来自百度网盘超级会员V6勇哥的分享


--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:
本帖最后由 勇哥,很想停止 于 2024-05-31 21:50:15 编辑

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864