C#使用Entity Framework Core处理数据库(一)

1.理解Entity Framework Core

Entity Framework Core(EF Core)是一个轻量级、跨平台的对象关系映射(ORM)框架,用于在.NET应用程序中处理数据库操作。它提供了一种将数据库中的数据映射到.NET对象模型的方法,使开发人员可以使用面向对象的方式进行数据库操作,而无需直接编写SQL语句。

EF Core支持多种数据库引擎,并具有良好的可扩展性和性能优化功能。它可以通过Code First(从代码开始)、Database First(从数据库开始)或Model First(从模型开始)等不同的开发方式来创建和管理数据库模式,以及执行查询、插入、更新和删除等操作。

与旧版的Entity Framework相比,Entity Framework Core具有以下一些显著的特点和改进:

  1. 跨平台支持:EF Core是一个跨平台的ORM框架,可以在Windows、Linux和MacOS等多种操作系统上运行。
  2. 更轻量级:EF Core相对于旧版的Entity Framework来说更加轻量级,性能更好,占用资源更少。
  3. 更快的启动和查询速度:EF Core在启动时更快,且执行查询的性能也得到了提升。
  4. 新的特性支持:EF Core引入了一些新的特性,如全局查询筛选器(Global Query Filters)、隐式事务(Implicit Transactions)等,以及更好的内存数据库支持等。
  5. 更好的扩展性:EF Core允许开发人员更容易地定制和扩展其功能,使得适应不同场景的需求更加灵活。
  6. 更好的测试支持:EF Core设计更加符合单元测试的要求,使得写测试代码变得更加容易。

2.设置EF Core

要使用Entity Framework Core,首先需要在.NET Core项目中安装Entity Framework Core相关的NuGet包。你可以打开Visual Studio的NuGet包管理器,并搜索"Microsoft.EntityFrameworkCore"来安装EF Core的核心包。此外,你可能还需要安装与所选择的数据库引擎相关的数据库提供程序,比如"Microsoft.EntityFrameworkCore.SqlServer"用于连接SQL Server。

3.定义EF Core模型

EF Core约定

  1. 在Entity Framework Core中,约定是指一组默认行为和规则,用于推断数据库模式和表结构,减少开发人员的配置工作。以下是EF Core中的一些约定:
  2. 命名约定:EF Core遵循一组命名约定来映射实体类到数据库表和属性到列。例如,表名通常与实体类的名称相同,属性名将被映射为列名。
  3. 主键约定:如果实体类的属性名是"Id"或类名加上"Id"的形式(如"ProductId"),则该属性将默认成为主键。
  4. 外键约定:如果一个导航属性以另一个实体类的主键命名,并且类型匹配,EF Core会自动推断出这是一个外键关系。
  5. 复合主键约定:如果一个实体类有多个属性被标记为主键,则它们将形成一个复合主键。
  6. 数据类型约定:EF Core会根据C#属性的类型推断对应的数据库数据类型,如string会映射为nvarchar、int会映射为int等。
  7. 表名及列名约定:EF Core使用复数形式的表名和小驼峰式的列名作为默认约定。
  8. 级联删除约定:在具有关系的实体类中,如果未定义级联删除选项,EF Core将默认使用级联删除。
  9. 数据库生成约定:如果未明确指定主键的值,EF Core将使用数据库生成的方式(如Identity)来生成主键值。
    这些约定使得在不进行额外配置的情况下,EF Core可以正常工作并映射数据库模式。然而,在某些情况下,可能需要手动配置以覆盖默认约定。
    EF Core注解特性
    在Entity Framework Core中,可以使用注解特性(Attribute)来对实体类和属性添加元数据,以指导EF Core的行为。常见的注解特性包括:

    Key\]:用于标记主键属性。

public class Product
{
[Key]
public int Id { get; set; }
// other properties
}

复制代码
\[Required\]:指示属性不允许为空(对应数据库中的NOT NULL约束)。

```csharp
public class Product
{
    [Key]
    public int Id { get; set; }  
    [Required]
    public string Name { get; set; }
    // other properties
}

MaxLength\]:指定字符串属性的最大长度。 ```csharp public class Product { [Key] public int Id { get; set; } [Required] [MaxLength(100)] public string Name { get; set; } // other properties } ``` \[ForeignKey\]:定义外键属性。 ```csharp public class Order { [Key] public int Id { get; set; } [ForeignKey("CustomerId")] public int CustomerId { get; set; } // other properties } ``` **EF Core Fluent API** Entity Framework Core的Fluent API提供了一种以流畅的方式配置实体类和数据库模型的方法。通过使用Fluent API,你可以对实体类之间的关系、主键、外键以及其他映射细节进行更加灵活和详细的配置。 1. 配置主键 ```csharp protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasKey(p => p.Id); } ``` 2. 配置属性 ```csharp protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .Property(p => p.Name) .IsRequired(); } ``` 3. 配置表名 ```csharp protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .ToTable("MyProducts"); } ``` 4. 配置关系 ```csharp protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasOne(o => o.Customer) .WithMany(c => c.Orders) .HasForeignKey(o => o.CustomerId); } ``` 5. 配置复杂类型 ```csharp protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .OwnsOne(c => c.HomeAddress); } ``` **构建EF Core模型** 1. 创建实体类 首先,定义代表数据库表的实体类。实体类通常是普通的C#类,用于映射数据库中的表和列。 ```csharp public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } } ``` 2. 创建数据上下文类 接下来,创建继承自DbContext的数据上下文类,该类表示了数据库连接和实体类之间的关系。 csharp ```csharp public class AppDbContext : DbContext { public DbSet Products { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("your_connection_string"); } } ``` 3. 配置模型 在数据上下文类中,使用Fluent API或者数据注解来配置实体之间的关系、主键、外键等细节。 ```csharp protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity() .HasKey(p => p.Id); // 其他配置... } ``` 4. 注册服务 在应用程序启动时,将数据库上下文注册为服务,以便能够在需要时注入到其他组件中。 5. 迁移 最后,在进行数据库迁移之前,确保已安装了Microsoft.EntityFrameworkCore.Tools NuGet包,并使用EF Core的CLI命令(如dotnet ef migrations add InitialCreate)来生成迁移脚本,以更新数据库结构。 通过以上步骤,你可以成功构建和配置Entity Framework Core模型,并与数据库进行交互。 感谢您阅读本文中关于Entity Framework Core的示例代码和说明。希望这些示例能够帮助您更好地理解如何在C#中构建EF Core模型。如果您有任何其他问题或需要进一步的指导,请随时告诉我。祝您编程愉快!

相关推荐
小奶包他干奶奶2 小时前
Webpack学习——Loader(文件转换器)
前端·学习·webpack
小奶包他干奶奶2 小时前
Webpack学习——原理理解
学习·webpack·devops
励志成为美貌才华为一体的女子2 小时前
强化学习PPO和GRPO逻辑学习
学习
tobebetter95272 小时前
How to manage python versions on windows
开发语言·windows·python
meichaoWen3 小时前
【Vue3】vue3的全面学习(一)
前端·javascript·学习
FFF团团员9093 小时前
树莓派学习笔记3:LED和Button
笔记·学习
9***P3343 小时前
PHP代码覆盖率
开发语言·php·代码覆盖率
CoderYanger3 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
jllllyuz4 小时前
Matlab实现基于Matrix Pencil算法实现声源信号角度和时间估计
开发语言·算法·matlab
多多*4 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven