.net ef core 领域设计代码转换(上篇)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > .net ef core 领域设计代码转换(上篇)

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

 2017/11/10 13:23:47  牛排大叔  程序员俱乐部  我要评论(0)
  • 摘要:一、前言.netcore2.0正式版已经发布几个月了,经过研究,决定把项目转移过来,新手的话可以先看一些官方介绍传送门:https://docs.microsoft.com/zh-cn/dotnet/core/由于在领域设计模型上遇到了一些坑,故给大家分享出来自己的一些解决方案。ok,直接上干货,大概结构如下:比较教科书式的架构。二、领域层领域实体值对象规约接口工作单元接口仓储接口聚合跟划分,我们先建立一个简单的用户实体三、仓储层引用Microsoft.EntityFrameworkCore
  • 标签:.net net 代码 领域 设计

 

一、前言

.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界面简单弄一下

后台代码:

 

上一篇: C# winform中Show()和ShowDialog()的区别 下一篇: 没有下一篇了!
发表评论
用户名: 匿名