.net ef core 领域设计代码转换(上篇)

本文介绍了将项目迁移到.NET Core 2.0过程中遇到的领域设计挑战,包括实体、值对象、规约接口、工作单元和仓储接口的实现。详细讲解了如何处理OnModelCreating的变化、数据库表名的自定义、级联删除的关闭以及FluentAPI的配置。此外,还展示了仓储层的改动,如Sql查询方式的调整,并给出了应用层、分布式服务层和展示层的简要说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

.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界面简单弄一下
在这里插入图片描述
后台代码:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值