ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

FreeSql CodeFirst 完全指南:自动建表、自动迁移结构,从此告别手写 DDL

FreeSql CodeFirst 完全指南:自动建表、自动迁移结构,从此告别手写 DDL FreeSql CodeFirst 完全指南自动建表、自动迁移结构从此告别手写 DDL【免费下载链接】FreeSql功能强大的对象关系映射O/RM组件支持 .NET Core 2.1、.NET Framework 4.0、Xamarin 以及 AOT。项目地址: https://gitcode.com/dotnetcore/FreeSqlFreeSql 是一款功能强大的 .NET 对象关系映射O/RM组件支持 .NET Core 2.1、.NET Framework 4.0 与 AOT。它的CodeFirst模式是本文的核心主角程序启动时自动对比实体类与数据库表结构缺表就建表、缺字段就加字段全程无需手写一行 DDL。对于新手和普通用户来说这是 FreeSql 最值得上手的特性——本文从概念、启用方式到进阶技巧带你完整掌握它。一、CodeFirst 是什么和 DbFirst 有什么区别FreeSql 提供两种开发模式理解它们的分工是入门第一步模式思路适合场景CodeFirst代码优先先写实体类框架自动建表、迁移结构新项目、快速迭代、开发环境DbFirst数据库优先先从现有数据库反向导入实体类接手遗留系统、老库改造一张图看懂 FreeSql 的整体功能布局CodeFirst含 Migration 迁移、Attribute/FluentAPI 映射、Navigate 导航位于左侧分支简单说你只管改 C# 实体类CREATE TABLE、ALTER TABLE、ADD COLUMN这些脏活累活FreeSql 帮你干。二、5 步启用自动建表最快上手步骤整个过程只需要 5 步核心就一行配置UseAutoSyncStructure(true)第 1 步安装数据库 Provider以 SQLite 为例dotnet add package FreeSql.Provider.SqliteSqlServer、MySql、PostgreSQL 等均有对应包。第 2 步定义实体类用特性描述表结构主键、自增一目了然class Song { [Column(IsIdentity true)] public int Id { get; set; } public string Title { get; set; } public string Url { get; set; } public DateTime CreateTime { get; set; } }第 3 步构建 FreeSql 实例并开启自动同步结构static IFreeSql fsql new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, Data Sourcedocument.db) .UseAutoSyncStructure(true) //自动同步实体结构到数据库 .Build(); //请务必定义成 Singleton 单例模式第 4 步任意对实体做一次 CRUD 操作如fsql.Insert(new Song{...})框架在首次访问时自动完成建表。第 5 步以后每次给实体加字段、改字段重启程序后同步自动生效数据库结构始终与代码保持一致。 更完整的入门示例可参考官方 README 快速入门章节README.zh-CN.md三、结构迁移背后发生了什么自动建表不是黑科技它的执行链路非常透明了解原理才能放心用对比将实体类与数据库当前表结构做对比生成差异 DDLCREATE TABLE/ALTER TABLE语句缓存同一实体 表名同步过一次后进入缓存不会每次请求都去对比数据库保证性能执行有差异的 DDL 自动执行无差异则直接跳过钩子同步前后提供 AOP 事件可拦截、日志、审批。对应源码入口如下建议收藏接口定义FreeSql/Interface/ICodeFirst.cs迁移核心实现FreeSql/Internal/CommonProvider/CodeFirstProvider.csAOP 同步钩子FreeSql/Interface/IAop.cs想先看再动用GetComparisonDDLStatements只取 DDL 不执行这是生产环境最推荐的做法// 只生成对比 DDL不执行人工审核 var ddl fsql.CodeFirst.GetComparisonDDLStatementsSong(); // 确认无误后再手动执行同步 fsql.CodeFirst.SyncStructureSong();通过Aop.SyncStructureBefore/Aop.SyncStructureAfter事件你还可以把每次迁移生成的 SQL 写入日志做到结构变更全留痕。实际用例可参考Examples/base_entity/Program.cs四、3 个高频进阶技巧技巧 1重命名表时如何避免误建新表默认规则下修改实体Table特性中的表名会被视为【创建新表】。想让 CodeFirst 正确执行ALTER TABLE ... RENAME只需补充OldName[Table(Name song_new, OldName song)] // OldName 填修改前的表名 class Song { ... }该特性的完整定义见FreeSql/DataAnnotations/TableAttribute.cs技巧 2给某张表关闭自动迁移对接第三方系统、共享表、分表场景不希望框架碰库表结构时一行特性即可豁免[Table(DisableSyncStructure true)] class ThirdPartyLog { ... }项目示例中大量使用了这种方式保护AspNetIdentity 等外部表参考Examples/base_entity/AspNetUsers.cs技巧 3用索引特性一并管理索引表结构之外Index特性可以让索引也跟随代码走支持唯一索引{TableName}占位符还能解决分表时索引重名问题[Index(song_idx_01, Title, false)] class Song { ... }定义见FreeSql/DataAnnotations/IndexAttribute.cs五、CodeFirst DbFirst 组合拳老库改造不费劲接手一个已有数据库FreeSql 的IsConfigEntityFromDbFirst配置可以把数据库里的主键、自增、索引自动导入到实体配置中无需在实体上手动标注[Column(IsPrimary)].UseConfigEntityFromDbFirst(true) // 适用 mysql/sqlserver/postgresql/oracle也就是说老库用 DbFirst 生成实体 → 开启该配置 → 之后继续享受 CodeFirst 的自动迁移两种模式无缝衔接。六、生产环境注意事项避坑清单⚠️SyncStructure官方文档明确标注生产环境中谨慎使用见 ICodeFirst.cs建议生产用GetComparisonDDLStatements出差异 → 人工审核 → 手动执行开启UseAutoSyncStructure(true)仅推荐开发/测试环境生产环境请显式调用迁移若在数据库上手动建了 CodeFirst 未管理的索引下次迁移时它会被删除——迁移前先出 DDL 看一眼FreeSql 实例务必定义成Singleton 单例否则结构缓存失效、反复对比数据库。总结FreeSql CodeFirst 把建表—加字段—改索引从手工 DDL 变成了改实体类就能搞定的事一行UseAutoSyncStructure(true)完成自动建表GetComparisonDDLStatementsSyncStructure掌控迁移节奏TableAttribute/IndexAttribute管理表名与索引Aop钩子保证变更可审计。上手只需 5 分钟却让数据库结构管理从此告别手写 DDL。【免费下载链接】FreeSql功能强大的对象关系映射O/RM组件支持 .NET Core 2.1、.NET Framework 4.0、Xamarin 以及 AOT。项目地址: https://gitcode.com/dotnetcore/FreeSql创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表