通过OnModelCreating实现EF Core全局配置,可统一设置软删除过滤器、属性默认值(如CreatedAt使用HasDefaultValueSql)、字符串最大长度,并利用模型约定自动化处理通用规则,减少重复代码,提升数据模型一致性与维护性。

在使用 EF Core 时,全局配置和默认值设置能显著减少重复代码,提升数据模型的一致性和维护性。通过 OnModelCreating 方法,你可以在 DbContext 中统一设置实体行为,比如默认值、字段长度、软删除等。
1. 使用 OnModelCreating 进行全局配置
EF Core 的全局配置主要在 DbContext 的 OnModelCreating 方法中完成。你可以遍历所有实体类型,对特定属性或符合规则的字段进行统一处理。
例如,为所有包含 IsDeleted 属性的实体启用软删除:
protected override void OnModelCreating(ModelBuilder modelBuilder){ foreach (var entityType in modelBuilder.Model.GetEntityTypes()) { var entity = modelBuilder.Entity(entityType.ClrType); // 查找是否有 IsDeleted 属性 var isDeletedProperty = entityType.FindProperty("IsDeleted"); if (isDeletedProperty != null && isDeletedProperty.PropertyInfo?.PropertyType == typeof(bool)) { // 设置查询过滤器:只返回未删除的数据 entity.HasQueryFilter(e => EF.Property(e, "IsDeleted") == false); } } base.OnModelCreating(modelBuilder);}
2. 为属性设置默认值
你可以通过 HasDefaultValue 或 HasDefaultValueSql 来设置列的默认值。
HasDefaultValue:设置常量默认值 HasDefaultValueSql:设置数据库函数或表达式示例:为创建时间设置默认值
modelBuilder.Entity() .Property(b => b.CreatedAt) .HasDefaultValueSql("GETDATE()"); // SQL Server //.HasDefaultValueSql("datetime('now')"); // SQLite
设置布尔字段的默认值
modelBuilder.Entity() .Property(u => u.IsActive) .HasDefaultValue(true);
3. 全局设置字符串字段最大长度
避免每个字符串属性都手动指定长度,可在 OnModelCreating 中统一处理。
foreach (var entityType in modelBuilder.Model.GetEntityTypes()){ foreach (var property in entityType.GetProperties()) { if (property.ClrType == typeof(string)) { property.SetMaxLength(200); // 统一设为200 } }}
4. 使用约定(Conventions)简化配置(EF Core 7+)
从 EF Core 7 开始支持更高级的模型约定,可以封装常用配置逻辑。
示例:自动为 CreatedAt 设置默认值
在 OnModelCreating 中添加:
modelBuilder.Entity() .Property(b => b.CreatedAt) .HasDefaultValueSql("GETUTCDATE()");
或者结合反射,自动识别命名规范的字段:
foreach (var entityType in modelBuilder.Model.GetEntityTypes()){ var createdAtProperty = entityType.FindProperty("CreatedAt"); if (createdAtProperty?.ClrType == typeof(DateTime)) { modelBuilder.Entity(entityType.ClrType) .Property("CreatedAt") .HasDefaultValueSql("GETUTCDATE()"); }}
基本上就这些。合理利用 OnModelCreating 和模型构建器,能让你的 EF Core 配置更简洁、统一。关键是提前规划好字段命名规范和通用行为,再通过循环或条件判断实现自动化配置。
以上就是C#中如何使用EF Core的全局配置?如何设置默认值?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1440234.html
微信扫一扫
支付宝扫一扫