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模型。如果您有任何其他问题或需要进一步的指导,请随时告诉我。祝您编程愉快!

相关推荐
owde几秒前
深入 C++ 线程库:从创建到同步的探索之旅
开发语言·c++·thread·lock
凌冰_1 分钟前
Java Collections 类中常用方法使用
java·开发语言
T0uken31 分钟前
【C++】信号槽与事件总线的轻量实现
开发语言·c++
du fei37 分钟前
C# 串口通信
开发语言·c#
停走的风1 小时前
jetson orin nano学习(torch+OpenCV+yolov5+)
学习·cuda·jetson
山居秋暝LS1 小时前
学习OpenCV C++版
c++·opencv·学习
Spring-wind1 小时前
【golang】堆和栈的区别
开发语言·golang
java奋斗者1 小时前
基于Java的人脸识别在线考试系统(jsp+springboot+mysql8.x)
java·开发语言·spring boot
小人物云斗磨盘1 小时前
从零推导飞机小扰动运动线性方程——0. 学习目录
学习
东京老树根2 小时前
自动变为 VIP 文章
笔记·学习