14、C 中使用 Entity Framework Core 进行数据交互

C# 中使用 Entity Framework Core 进行数据交互

1. 技术要求

要进行后续操作,需要安装 Visual Studio 2017 或 2019 免费社区版或更高版本,并安装所有数据库工具。所有概念将通过基于特定用例的实际示例进行说明,代码可在 https://github.com/PacktPublishing/Hands-On-Software-Architecture-with-CSharp-8 找到。

2. 理解 ORM 基础
  • 类型映射
    • ORM 将关系型数据库表映射到内存中的对象集合,对象属性对应数据库表字段。C# 中的布尔型、数值类型和字符串等类型都有对应的数据库类型。
    • 若映射的数据库中没有 GUID 类型,GUID 会映射为等效的字符串表示;单字符映射为数据库单字符字符串。
    • 日期和时间类型:若日期/时间不含时区信息,映射为 C# 的 DateTime ;若包含时区信息,映射为 DateTimeOffset 。数据库时间间隔映射为 TimeSpan
  • 映射配置
    • 由于面向对象语言的字符串属性通常无长度限制,而数据库字符串字段有长度限制,这些限制需在数据库映射配置中考虑。
    • 当数据库类型和面向对象语言类型的映射需要指定选项时,这些选项在映射配置中声明。Entity Fr
源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
### C#使用Entity Framework Core执行数据库迁移 在C#开发中,Entity Framework Core(EF Core)是一个强大的对象关系映射(ORM)工具,用于简化与数据库的交互。数据库迁移是EF Core中的一个重要功能,它允许开发者将数据模型的更改同步到数据库结构中[^2]。 #### 安装必要的NuGet包 在开始数据库迁移之前,需要确保项目中安装了EF Core的相关NuGet包。可以通过以下命令安装核心包和工具包: ```bash dotnet add package Microsoft.EntityFrameworkCore dotnet add package Microsoft.EntityFrameworkCore.Tools ``` #### 配置DbContext 为了使EF Core能够管理数据库迁移,必须正确配置 `DbContext` 类。以下是一个简单的 `DbContext` 示例: ```csharp using Microsoft.EntityFrameworkCore; public class SchoolContext : DbContext { public DbSet<Student> Students { get; set; } public DbSet<Course> Courses { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=SchoolDb;Trusted_Connection=True;"); } } ``` #### 创建初始迁移 通过以下命令创建一个初始迁移文件,该文件包含当前数据模型的快照: ```bash dotnet ef migrations add InitialCreate ``` 此命令会生成一个迁移文件,其中包含 `Up` 和 `Down` 方法。`Up` 方法定义了如何应用迁移,而 `Down` 方法定义了如何回滚迁移[^3]。 #### 应用迁移到数据库 一旦迁移文件创建完成,可以使用以下命令将其应用到数据库: ```bash dotnet ef database update ``` 这将在目标数据库中创建所需的表和结构。 #### 添加后续迁移 当数据模型发生更改时,可以创建新的迁移来反映这些更改。例如,如果向 `Student` 实体添加了一个新属性,则可以通过以下命令创建一个新的迁移: ```bash dotnet ef migrations add AddBirthDateToStudent ``` #### 回滚迁移 如果需要撤销最近的迁移,可以使用以下命令: ```bash dotnet ef migrations remove ``` 这将删除最近的迁移文件,并从数据模型中移除相应的更改。 #### 使用代码优先(Code First)模式 EF Core支持代码优先模式,这意味着数据库结构由代码中的实体类和 `DbContext` 定义。通过迁移功能,可以轻松地将这些定义同步到实际的数据库中[^4]。 #### 示例:完整的迁移流程 以下是一个完整的迁移流程示例: 1. 定义实体类和 `DbContext`。 2. 创建初始迁移: ```bash dotnet ef migrations add InitialCreate ``` 3. 应用迁移到数据库: ```bash dotnet ef database update ``` 4. 修改实体类后创建新的迁移: ```bash dotnet ef migrations add AddNewProperty ``` 5. 再次应用迁移: ```bash dotnet ef database update ``` #### 处理复杂场景 在某些情况下,可能需要手动编辑迁移文件以处理复杂的数据库变更。例如,添加外键约束或索引时,可以在 `Up` 方法中编写自定义SQL语句[^3]。 ```csharp protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.Sql("ALTER TABLE Students ADD CONSTRAINT FK_Students_Courses FOREIGN KEY (CourseId) REFERENCES Courses(CourseId)"); } ``` #### 性能优化 在执行迁移时,可以通过禁用自动检测更改或使用批处理操作来提高性能。例如,在 `OnConfiguring` 方法中禁用更改跟踪: ```csharp optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值