.net ef core 领域设计代码转换(上篇)
一、前言
.net core 2.0正式版已经发布几个月了,经过研究,决定把项目转移过来,新手的话可以先看一些官方介绍
传送门:https://docs.microsoft.com/zh-cn/dotnet/core/
由于在领域设计模型上遇到了一些坑,故给大家分享出来自己的一些解决方案。
ok,直接上干货,大概结构如下:
比较教科书式的架构。
二、领域层
领域实体
值对象
规约接口
工作单元接口
仓储接口
聚合跟划分,我们先建立一个简单的用户实体
三、仓储层
引用Microsoft.EntityFrameworkCore.Sqlite
工作单元ISql接口
工作单元IQueryableUnitOfWork接口
接下来是重点了,构造函数的改变:
OnModelCreating变化:
以前的设置
现在ef core里面没有提供这么方便的封装,需要自己去实现
数据库表名更改:
public static void SetSimpleUnderscoreTableNameConvention(this ModelBuilder modelBuilder) { foreach (IMutableEntityType entity in modelBuilder.Model.GetEntityTypes()) { Regex underscoreRegex = new Regex(@"((?<=.)[A-Z][a-zA-Z]*)|((?<=[a-zA-Z])\d+)"); entity.Relational().TableName = underscoreRegex.Replace(entity.DisplayName(), @"$1$2").ToLower(); } }
关掉所有主外键关系的级联删除
public static void SetOneToManyCascadeDeleteConvention(this ModelBuilder modelBuilder) { foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys())) { relationship.DeleteBehavior = DeleteBehavior.Restrict; } }
Fluent Api 配置
public abstract class EntityTypeConfiguration<TEntity> where TEntity : class { public abstract void Map(EntityTypeBuilder<TEntity> builder); }
public static void AddConfiguration<TEntity>(this ModelBuilder modelBuilder, EntityTypeConfiguration<TEntity> configuration) where TEntity : class { configuration.Map(modelBuilder.Entity<TEntity>()); }
public class UserEntityTypeConfiguration : EntityTypeConfiguration<User> { public override void Map(EntityTypeBuilder<User> builder) { builder.HasKey(u => u.Id); } }
使用的时候就这样添加,毫无违和感。
Sql查询的方式改变了一下
User表仓储实现的时候注意一下构造函数的类型,.net core依赖注入的时候会涉及到这里
四、应用层
应用层没什么变化,直接贴代码
五、分布式服务层
.net core自带了一个简单的Ioc,所以以前我们用的类似于Unity等框架就可以去掉了
Configuration这个是怎么来的呢?
.net core现在建议采用Json等配置文件,用起来非常爽非常强大
然后我们需要确保存数据库不存在的时候正确创建
UserController代码:
六:展示层
WPF界面简单弄一下
后台代码:
作者:
牛排大叔
出处: http://www.cnblogs.com/beefsteak/ 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问或者授权方面的协商,请联系我
出处: http://www.cnblogs.com/beefsteak/ 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问或者授权方面的协商,请联系我
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?