.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界面簡單弄一下

后台代碼:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM