一、前言 .net core 2.0正式版已經發佈幾個月了,經過研究,決定把項目轉移過來,新手的話可以先看一些官方介紹 傳送門:https://docs.microsoft.com/zh-cn/dotnet/core/ 由於在領域設計模型上遇到了一些坑,故給大家分享出來自己的一些解決方案。 ok,直 ...
一、前言
.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界面簡單弄一下
後臺代碼: