📅  最后修改于: 2023-12-03 15:39:08.097000             🧑  作者: Mango
Entity Framework Core (EF Core)是一个轻量级、可扩展、开源和跨平台的 ORM (Object-Relational Mapping)框架,作为 .NET Core 技术栈中的基础组件之一,可用于与各种数据库(如 PostgreSQL、SQL Server、MySQL 等)进行交互。
相比其它 ORM 框架,EF Core 具有以下优势:
轻量级:EF Core 比前代版本(EF6)更加轻量化,体积减小;
跨平台:EF Core 支持 .NET Core、.NET Framework、Xamarin、UWP 等众多平台;
易学易用:EF Core 的 API 设计新颖,扩展性强,学习和使用较为容易;
可扩展性强:EF Core 支持插件式开发,可以方便地扩展其功能;
性能优秀:EF Core 通过查询编译器、查询优化器等技术实现了较高的查询性能。
首先,我们需要创建一个继承自 DbContext 的数据库上下文类,用于连接并操作数据库。下面是一个简单的示例:
using System;
using Microsoft.EntityFrameworkCore;
namespace EFCoreDemo
{
// 定义一个数据库上下文类
public class MyDbContext : DbContext
{
// 使用构造函数注入数据连接字符串
public MyDbContext(DbContextOptions<MyDbContext> options)
: base(options) { }
// 定义一个实体集属性,在数据库中会生成一张对应的表
public DbSet<Person> People { get; set; }
}
// 定义一个实体类
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public DateTime Birthday { get; set; }
}
}
接下来,我们需要在 Program.cs 中配置并创建 DbContext。
using System;
using System.Linq;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
namespace EFCoreDemo
{
class Program
{
static void Main(string[] args)
{
// 配置依赖注入容器
var services = new ServiceCollection()
.AddDbContext<MyDbContext>(options =>
{
options.UseSqlServer("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=EFCoreDemo;Integrated Security=True");
})
.BuildServiceProvider();
using var scope = services.CreateScope();
// 从容器中获取 MyDbContext 实例
var context = scope.ServiceProvider.GetRequiredService<MyDbContext>();
// 进行数据库迁移
context.Database.Migrate();
// 添加一条数据到 People 表中
context.People.Add(new Person()
{
Name = "Alice",
Age = 20,
Birthday = new DateTime(2001, 1, 1),
});
context.SaveChanges();
// 查询 People 表中所有的数据并打印到控制台
foreach (var person in context.People)
{
Console.WriteLine($"Name:{person.Name}, Age:{person.Age}, Birthday:{person.Birthday}");
}
}
}
}
运行上述程序,即可完成对数据库的连接,并向 People 表中添加一条数据,并从 People 表中查询并输出所有的数据到控制台。
本文简单介绍了 EF Core 的优势以及使用方法,适合初次接触的程序员进行学习和掌握。在实际开发中,EF Core 作为数据访问的重要组件,可以大大提高开发效率,减轻程序员的工作负担。