ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

EFCore先DBFirst,再CodeFirst(针对老项目迁移)

2022-08-26 20:36:04  阅读:174  来源: 互联网

标签:Core CodeFirst 项目 数据库 DbContext 生成 EFCore DBFirst


参照文章:

CodeFirst命令介绍:Scaffold-DbContext 命令使用 - 跟着阿笨一起玩.NET - 博客园 (cnblogs.com)

整体流程介绍:NetCore 中 EFcore的DbFirst和CodeFirst混合 使用注意 (shuzhiduo.com)

对于老项目往新项目迁移:

1、因为项目已经运转一段时间,数据库里已经存在大量的业务数据,所以新项目的实体类得从数据库去映射(DBFirst)

2、后续新项目因为业务更改涉及的变动,我们直接改代码映射到数据库更方便(CodeFirst)

一、CodeFirst

CodeFirst命令实例:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables "Blog","Post" -ContextDir Context -Context BlogContext -ContextNamespace New.Namespace

Scaffold-DbContext
为 DbContext 数据库的和实体类型生成代码。 为了使 Scaffold-DbContext 生成实体类型,数据库表必须具有主键。
参数:
SCAFFOLD-DBCONTEXT
参数 说明
-Server连接 <String> 用于连接到数据库的连接字符串。 对于 ASP.NET Core 2.x 项目,值可以是 name = <name of connection string> 。   在这种情况下,该名称来自为项目设置的配置源。 这是一个位置参数,并且是必需的。

-提供程序 <String> 要使用的提供程序。 通常,这是 NuGet 包的名称,例如: Microsoft.EntityFrameworkCore.SqlServer 。 这是一个位置参数,并且是必需的。
-OutputDir <String> 要在其中放置文件的目录。 路径相对于项目目录。
-ContextDir <String> 要在其中放置文件的目录 DbContext 。 路径相对于项目目录。
-命名空间 <String> 要用于所有生成的类的命名空间。 默认值为从根命名空间和输出目录生成。 在 EF Core 5.0 中添加。
-ContextNamespace <String> 要用于生成的类的命名空间 DbContext 。 注意:重写 -Namespace 。 在 EF Core 5.0 中添加。
-Context 上下文 <String> DbContext要生成的类的名称。
-架构 <String[]> 要为其生成实体类型的表的架构。 如果省略此参数,则包括所有架构。
-Table 表 <String[]> 要为其生成实体类型的表。 如果省略此参数,则包括所有表。
-DataAnnotations 使用属性可在可能) 的情况下配置模型 (。 如果省略此参数,则只使用 Fluent API。
-UseDatabaseNames 使用表和列的名称与数据库中显示的名称完全相同。 如果省略此参数,则更改数据库名称以更严格地符合 c # 名称样式约定。
-Force 覆盖现有文件。
-NoOnConfiguring 不生成 DbContext.OnConfiguring 。 在 EF Core 5.0 中添加。
-NoPluralize 请勿使用复数化程序。 在 EF Core 5.0 中添加。

二、CodeFirst的解读

对于add-midgration——生成一个cs文件,里面有更新数据库的语句

update-database——将生成更新数据库的语句执行到数据库,并且在数据库的dbo.__EFMigrationsHistory表里添加一次更新记录

MigrationId——对应的add-midgration生成文件的文件名

ProductVersion——对应的版本号

核心思路

就是在DBfirst后,先用add-midgration生成一个文件,这个文件会生成所有实体表的创建命令。

然后我们伪造一条记录进去dbo.__EFMigrationsHistory作为codefirst的记录。(注意MigrationId对应的刚刚生成的文件名)

 

标签:Core,CodeFirst,项目,数据库,DbContext,生成,EFCore,DBFirst
来源: https://www.cnblogs.com/summerZoo/p/16629044.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有