EF Core入门 CodeFirst先在程序中建立要映射到数据库的实体结构,然后EntityFramework可以根据实体结构生成所对应的数据库,进行基本增删改查
原文链接:
https://blog.csdn.net/qq_47053856/article/details/128378155
前言
EF Core是微软官方提供的ORM框架。EF Core不仅可以操作Microsoft SQL Server、MySQL、Oracle、PostgreSQL等数据库,而且可以操作Azure Cosmos DB等NoSQL数据库
一、EF Core环境搭建
前提条件:已经完整安装了Microsoft SQL Server
下面是一个实际操作EF Core的演示
- 这是项目最终的目录,这里需要关注的就是
.cs
文件
- 首先新建一个
.NET Core
控制台项目,然后在项目中创建Book实体类
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
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 为项目安装NutGet包
Microsoft.EntityFrameworkCore.SqlServer
安装命令
Install-Package Microsoft.EntityFrameworkCore.SqlServer
- 1
- 创建实现了
IEntityTypeConfiguration
接口的实体类的配置类BookEntityConfig
class BookConfig : IEntityTypeConfiguration<Book>
{
public void Configure(EntityTypeBuilder<Book> builder)
{
//表示实体类对应的数据库表的名字为T_Books
builder.ToTable("T_Books");
//这里没有配置各个属性子在数据库中列名和数据类型,EF Core将会默认把属性的名字作为列名,并且以属性的类型来推断数据库表中各列的数据类型
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
这个配置的作用是配置实体类和数据库表的对应关系,现在可能理解的并不深刻,后面就会明白很多了…
- 创建一个继承自DbContext类的MyDbContext类(名字没有要求)
class MyDbContext:DbContext
{
public DbSet<Book> Books { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
optionsBuilder.UseSqlServer("Server=.;Database=demo1;Trusted_Connection=True;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//从当前程序集中加载所有的IEntityTypeConfiguration
modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
MyDbContext中的Books属性对应的数据库中的T_Books表,对Books的操作将会反映到数据库的T_Books表中。这种传承自DbContext的类叫做“上下文” 。
OnConfiguring
方法用于对程序要连接的数据库进行配置,这里的配置
optionsBuilder.UseSqlServer("Server=.;Database=demo1;Trusted_Connection=True;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;");
- 1
是对本地SQL Server数据库的连接,名为demo1的数据库,如果连接其他的服务器中的数据库,需求去微软文档查看相应的连接字符串要求
- 通过NuGet为项目安装
Microsoft.EnityFrameworkCore.Tools
包,这是为了使用EF Core生成数据库工具
Install-Package Microsoft.EnityFrameworkCore.Tools
- 1
- 安装完之后我们执行
Add-Migration
命令会自动在项目的Migrations文件夹中生成C#代码
这里后面的AddBirth
是自行定义的,是一个名字而已 - 最后执行
Update-database
命令那些在Migrations
文件夹中用来创建数据库表的代码才会被应用到数据库中
这时候我们就可以来查看数据库中是否有对应的表了
二、基本的增删改查
1.增加数据
这里是在Program.cs
中操作了
internal class Program
{
static async Task Main(string[] args)
{
//创建逻辑上的数据库
using (MyDbContext myDbContext = new MyDbContext())
{
Book b1 = new Book
{
AuthorName = "杨中科",
Title = "零基础学C语音",
Price = 59.8,
PubTime = new DateTime(2019, 3, 1)
};
Book b2 = new Book
{
AuthorName = "Robert Sedgewick",
Title = "算法(第四版)",
Price = 99,
PubTime = new DateTime(2012, 10, 1)
};
Book b3 = new Book
{
AuthorName = "吴军",
Title = "数学之美",
Price = 69,
PubTime = new DateTime(2020, 5, 1)
};
Book b4 = new Book
{
AuthorName = "杨中科",
Title = "程序员的SQL金典",
Price = 52,
PubTime = new DateTime(2008, 9, 1)
};
Book b5 = new Book
{
AuthorName = "吴军",
Title = "文明之光",
Price = 246,
PubTime = new DateTime(2017, 3, 1)
};
//把对象加入逻辑上的表上面
myDbContext.Books.Add(b1);
myDbContext.Books.Add(b2);
myDbContext.Books.Add(b3);
myDbContext.Books.Add(b4);
myDbContext.Books.Add(b5);
//Update-Database
await myDbContext.SaveChangesAsync();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
2.查询数据
IQueryable<Book> books = myDbContext.Books.Where(b => b.Price > 80);
foreach(var book in books)
{
Console.WriteLine(book.Title);
}
var Book = myDbContext.Books.Single(b => b.Title == "零基础学C语言");
Console.WriteLine(Book.AuthorName);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
查询就不需要 await myDbContext.SaveChangesAsync();
了,在Main方法中执行即可
3.修改数据,删除数据
修改数据和删除数据,都分两步,第一步就是把数据查询出来,再就是对应操作
//修改,要对数据进行修改,首先先查出来对应数据,再修改
var b = myDbContext.Books.Single(b => b.Title == "数学之美");
b.AuthorName = "junwu";
Dog dog = myDbContext.Dogs.Single(b => b.Id == 2);
myDbContext.Dogs.Remove(dog);
await myDbContext.SaveChangesAsync();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2020-07-30 C#中几种常用的集合的用法ArrayList集合HashTable集合List<T>集合Dictionary<K,V>集合及区别