zoukankan      html  css  js  c++  java
  • .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/ 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问或者授权方面的协商,请联系我 奔跑的牛排
  • 相关阅读:
    ZooKeeper实践:(1)集群管理
    删除重复数据只保留一条
    查询sqlserver 大小写
    字段按位数自动加空格
    批量更新数据遍历数据
    测试端口号是否开通
    收缩数据库
    插入ID=-1 的数据
    查询重复语句,多表查询
    oracle数据查询时间
  • 原文地址:https://www.cnblogs.com/beefsteak/p/7805853.html
Copyright © 2011-2022 走看看