• .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/ 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问或者授权方面的协商,请联系我 奔跑的牛排
  • 相关阅读:
    51nod1370 排列与操作
    2019-11-20-Github-给仓库上传-NuGet-库
    2019-11-20-Github-给仓库上传-NuGet-库
    2019-6-5-WPF-隐藏系统窗口菜单
    2019-6-5-WPF-隐藏系统窗口菜单
    2019-8-31-AutoHotKey-用打码的快捷键
    2019-8-31-AutoHotKey-用打码的快捷键
    2019-4-10-win10-uwp-自定义标记扩展
    2019-4-10-win10-uwp-自定义标记扩展
    2018-9-3-C#-const-和-readonly-有什么区别
  • 原文地址:https://www.cnblogs.com/beefsteak/p/7805853.html
Copyright © 2020-2023  润新知