尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ASP.NET Boilerplate 迁移到 MySQL:EF6 与 ASP.NET MVC 5.x 完整集成指南

ASP.NET Boilerplate 迁移到 MySQL:EF6 与 ASP.NET MVC 5.x 完整集成指南 后端Web框架依赖注入认证鉴权【免费下载链接】aspnetboilerplateASP.NET Boilerplate - Web Application Framework项目地址https://gitcode.com/gh_mirrors/as/aspnetboilerplate点击查看免费下载ASP.NET Boilerplate 的官方免费启动模板默认针对 SQL Server 设计但通过几步配置即可切换到 MySQL。本文以经典 EF6Entity Framework 6.x ASP.NET MVC 5.x 技术栈为背景完整讲解从下载模板、安装 MySQL 连接器 NuGet 包、改写 web.config、配置 EF 迁移生成器到重新生成并执行数据库迁移的全过程并给出两个连接器版本的对照配置。读完本文你将具备把 ABP 分层架构.EntityFramework .Web无缝切换到 MySQL 数据库的实战能力并理解其底层依赖关系。一、迁移思路总览ABP 官方模板Startup Template默认使用 SQL Server但 ABP 对数据存储层是开放可替换的。官方文档在 EntityFramework-Integration.md 中明确指出Since ASP.NET Boilerplate has built-in integration with EntityFramework, it can work with the data stores EntityFramework supportsABP 内置 EntityFramework 集成因此可以支持 EF 支持的所有数据存储而迁移到 MySQL 的完整步骤就是本篇文档的内容。整体迁移流程分为五步下载带 Entity Framework 的 ASP.NET MVC 5.x 模板在.EntityFramework与.Web两个项目中安装 MySQL 连接器 NuGet 包修改app.config/web.config中的 EF 提供程序配置与连接字符串在 EF 迁移配置类Configuration.cs中注册 MySQL 迁移 SQL 生成器删除 SQL Server 版迁移文件重新执行Add-Migration与Update-Database生成 MySQL 数据库。下面按顺序逐一展开。二、下载带 Entity Framework 的 MVC 5.x 模板前往 aspnetboilerplate.com 的 Templates模板下载页面下载一个新项目。需要注意必须选择ASP.NET MVC 5.x选项卡而非 ASP.NET Core不要忘记勾选Entity Framework而非 NHibernate 等其他 ORM若你的项目需要登录、注册、用户、角色、租户管理页面即 Module Zero 相关功能请勾选 Include login, register, user, role and tenant management pages这会引入 AbpZero 相关迁移文件——后续重新生成迁移一节会专门处理这些文件。下载后解决方案中应至少包含.EntityFramework数据访问层与.Web表现层两个关键项目后续所有修改都围绕这两个项目展开。三、安装 MySQL 连接器 NuGet 包需要在.EntityFramework和.Web两个项目中同时安装连接器包。包的选择取决于你使用的 MySQL Connector/NET 版本连接器版本安装的 NuGet 包程序集命名空间Connector/NET 8.0.x 或更高MySql.Data.EntityFrameworkMySql.Data.EntityFramework更早的 Connector/NET 版本MySql.Data.EntityMySql.Data.Entity两者的关键区别在于程序集名与命名空间8.0 使用MySql.Data.EntityFramework旧版本使用MySql.Data.Entity。这一区别将直接决定下一节web.config中codeConfigurationType、type以及迁移 SQL 生成器的写法务必与你的实际安装版本保持一致。四、修改 app.config / web.config将 NuGet 包安装到.Web项目时安装程序通常会自动改写web.config。官方文档提醒安装完成后务必检查web.config是否已被正确修改核对以下三处内容。4.1entityFramework节点codeConfigurationType需要指向 MySQL 的 EF 配置类按连接器版本二选一!-- 旧版 Connector/NETMySql.Data.Entity -- entityFramework codeConfigurationTypeMySql.Data.Entity.MySqlEFConfiguration, MySql.Data.Entity !-- Connector/NET 8.0MySql.Data.EntityFramework -- entityFramework codeConfigurationTypeMySql.Data.EntityFramework.MySqlEFConfiguration, MySql.Data.EntityFramework4.2provider节点需要在providers列表中注册 MySQL 提供程序服务invariantName统一为MySql.Data.MySqlClienttype中的程序集名按版本区分!-- 旧版 Connector/NET -- provider invariantNameMySql.Data.MySqlClient typeMySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity / !-- Connector/NET 8.0 -- provider invariantNameMySql.Data.MySqlClient typeMySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework /4.3 连接字符串将web.config或app.config中的Default连接字符串改为指向 MySQL。官方给出的示例为add nameDefault connectionStringserverlocalhost;port3306;databasesampledb;uidroot;password*** providerNameMySql.Data.MySqlClient/各参数含义与建议如下参数含义示例/说明server或ServerMySQL 服务器地址localhost、127.0.0.1或远程主机名port服务端口默认3306database目标数据库名例如sampledb需提前创建或由迁移自动创建uid登录用户名例如rootpassword或pwd用户密码生产环境请妥善保管providerNameADO.NET 提供程序不变名固定为MySql.Data.MySqlClient如需指定字符集可按需追加CharSetutf8mb4等参数非本篇必需项视业务需求自行决定。注意连接字符串的name必须为Default因为 ABP 的 DbContext 默认通过Default名称解析连接这一点在 EntityFramework-Integration.md 的 DbContext 一节有明确说明构造函数向基类传递Default期望web.config/app.config中存在名为Default的连接字符串。五、配置 EF 迁移生成器Configuration.csEF Code First 迁移需要知道如何将迁移操作翻译成目标数据库的 SQL 方言。打开你的 DbContext 对应的迁移配置类Configuration.cs位于.EntityFramework项目的 Migrations 文件夹中即 EF 自动生成的DbMigrationsConfiguration派生类在其构造函数中加入以下代码SetSqlGenerator(MySql.Data.MySqlClient, new MySql.Data.Entity.MySqlMigrationSqlGenerator());SetSqlGenerator是DbMigrationsConfiguration提供的方法作用是把某个invariantName这里是MySql.Data.MySqlClient对应的迁移 SQL 生成器替换为 MySQL 实现从而使Add-Migration/Update-Database生成的 SQL 符合 MySQL 语法。上述写法对应旧版连接器。如果你使用的是 Connector/NET 8.0可以推断与 4.1、4.2 节相同的命名规律应改用MySql.Data.EntityFramework命名空间下的同名类new MySql.Data.EntityFramework.MySqlMigrationSqlGenerator()请以你安装的包实际暴露的 API 为准。Configuration.cs本身需要保留不要删除——它是迁移引擎的配置入口。六、删除旧迁移并重新生成6.1 为什么必须删除如果在下载模板时勾选了 Include login, register, user, role and tenant management pages.EntityFramework项目会包含一批迁移文件这些迁移是为 SQL Server 生成的例如表名、列类型、主键自增策略等均按 SQL Server 方言生成。直接基于它们执行Update-Database会生成错误的 SQL因此必须清空后为 MySQL 重新生成。6.2 删除迁移文件删除.EntityFramework项目Migrations 文件夹下的所有迁移文件。迁移文件的命名以时间戳开头形如201506210746108_AbpZero_Initial即以201506210746108这类时间戳加下划线开头的.cs文件以及对应的.Designer.cs与资源文件。请保留Configuration.cs上一节刚改过与DbContext相关文件。6.3 添加新迁移操作步骤官方推荐方式在 Visual Studio 中将.Web项目设为启动项目打开Package Manager Console程序包管理器控制台在控制台右上角将默认项目切换为.EntityFramework项目执行命令Add-Migration AbpZero_Initial该命令会基于当前模型含 ABP/Module Zero 的内置实体生成 MySQL 方言的全量初始迁移。若此前有其他领域实体可按需调整迁移名称。6.4 创建数据库接着执行Update-DatabaseUpdate-Database会把迁移应用到 MySQL自动创建数据库表结构必要时创建数据库本身。命令执行成功后即可启动.Web项目使用 MySQL 完成应用运行。七、常见问题ProviderManifestToken 错误迁移或运行阶段若出现形如The provider did not return a ProviderManifestToken提供程序未返回 ProviderManifestToken的错误通常意味着 EF 在初始化阶段无法从连接字符串解析出 MySQL 提供程序信息。排查方向按优先级排列确认web.config中entityFramework的codeConfigurationType与provider的type是否正确、程序集名与安装的 NuGet 包版本是否匹配见第四节确认连接字符串的providerNameMySql.Data.MySqlClient与provider节点的invariantName一致确认连接字符串各参数正确尤其是server、port、uid/password服务可达且端口可通确认两个项目.EntityFramework与.Web安装的连接器版本一致避免引用冲突。八、源码层面ABP 与 EF / MySQL 的协作机制了解底层机制有助于排查问题。ABP 的 EF 集成核心在Abp.EntityFramework程序集以下两个文件值得关注AbpDbContext.cs所有 DbContext 的基类。它继承了System.Data.Entity.DbContext并注入IAbpSession、IEntityChangeEventHelper、IEventBus、IGuidGenerator等基础设施在SaveChanges/SaveChangesAsync中统一处理审计字段、软删除、多租户 TenantId 自动赋值、领域事件等 ABP 约定。切换到 MySQL 后这些约定仍然生效因为数据库无关的逻辑都在这层完成。AbpEntityFrameworkModule.cs模块初始化时通过类型扫描自动注册所有继承AbpDbContext的上下文及其泛型仓储IRepository并注册IDbContextProvider。这说明只要你的 DbContext 按 ABP 规范继承AbpDbContext无论底层是 SQL Server 还是 MySQL仓储注入与工作单元机制无需任何改动。此外如果项目同时使用 Dapper-Integration.md仓库还提供了 MySqlDialect.cs 来适配 MySQL 的方言反引号引用标识符、LIMIT ... OFFSET ...分页、LAST_INSERT_ID()自增获取等可作为 MySQL 兼容性的旁证。如果你使用的是ASP.NET Core Entity Framework Core技术栈本仓库另有对应的集成文档 EF-Core-MySql-Integration.md它使用 Pomelo.EntityFrameworkCore.MySql 提供程序并通过ServerVersion.AutoDetect(connectionString)自动探测服务器版本配置与命令流程与本篇 EF6 版本相对应可作为迁移到新技术栈时的参考。九、总结至此你的 ABP MVC 5.x 项目已切换至 MySQL连接器包安装到.EntityFramework与.Webweb.config完成 EF 提供程序注册与连接字符串替换Configuration.cs注册 MySQL 迁移生成器旧迁移清除后重新Add-MigrationUpdate-Database生成数据库。整个过程中ABP 的仓储、工作单元、审计与多租户能力保持不变——这正是 ABP 面向多种数据库开放的架构设计带来的收益。唯一需要牢记的是连接器版本决定了MySql.Data.Entity与MySql.Data.EntityFramework两套命名空间的选择配置时务必前后一致。赞分享后端Web框架依赖注入认证鉴权【免费下载链接】aspnetboilerplateASP.NET Boilerplate - Web Application Framework项目地址https://gitcode.com/gh_mirrors/as/aspnetboilerplate点击查看免费下载相关推荐vue3-element-admin安全防护XSS与CSRF攻击防范vue3 element admin安全防护XSS与CSRF攻击防范 在现代Web应用开发中安全防护是不可忽视的重要环节。作为基于Vue3和Element后端Web框架Baserow扩展性设计如何支撑百万级用户与TB级数据的终极指南Baserow扩展性设计如何支撑百万级用户与TB级数据的终极指南 Baserow作为一款开源无代码数据库工具和Airtable替代方案其独特的扩展性设计使其后端前端数据库低代码工作流自动化从 ASP.NET Core 迁移到 GoFrC 微服务团队迁移到 Go 的完整指南从 ASP.NET Core 迁移到 GoFrC 微服务团队迁移到 Go 的完整指南 本指南面向正在评估或已经决定从 ASP.NET Core 迁移到 GoF后端微服务云原生可观测性上一篇TediCross未来路线图功能扩展与社区贡献指南下一篇猫抓插件三步掌握浏览器资源嗅探的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表