.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();} }
?
關掉所有主外鍵關系的級聯刪除
?
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 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/p/7805853.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的.net ef core 领域设计代码转换(上篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core中的OWASP
- 下一篇: Microsoft的现代数据管理