前言
- 本系列源自對EF6 CodeFirst的探索,但后來發現在自己項目中構建的時候遇到了一些問題以及一些解決方法,因此想作為一個系列寫下來。
- 本系列並不是教你怎么做架構設計,但可以參照一下里面的方法。本系列只是為了說明這些技術應用而構建的一個簡單的解決方案。EF系列大都采用DDD的構建方式,這也是目前最流行的。如果你想對DDD有所了解,可以在園子當中尋找那些DDD方面的文章或者是在CodePlex上下載相關的DDD設計模型源碼進行研究。
- 如果你是一個新人或者是沒有用過EF6 CodeFirst的人,那么本系列將帶你一步一步構建自己的解決方案平台。如果你是對EF有研究的人,那么不正之處,歡迎指教。
系統場景
當我們對系統進行設計的時候,往往會考慮到它的權限設計,本系列就針對一個簡單的權限場景來對總個系統進行設計和技術要點的實現。
- 需求列表
| 1. 系統具備管理員和操作員的角色; 2. 一個系統用戶只能屬於某個角色; 3. 一個角色用戶可以操作多個業務模塊,一個業務模塊可以被多個角色用戶操作; 4. 業務模塊和角色用戶之間可以進行配置; 5. 系統日志維護 6. 系統字典維護 |
- UML用例圖

- PD數據庫設計

- EF實體對象模型

- 系統框架搭建

- Common 系統通用類庫層:主要存放一些系統的需要的通用訪問的幫助類問價,比如本示例采用的主鍵編碼為長整形的編碼規則類、用戶密碼加密和解密的幫助類等;
- Abstract領域抽象層:也就是我們常說的接口層,主要是定義業務實現方法的接口;
- Concrete領域實現層:對領域業務的實現類以及領域模型的構建;
- Entities實體層:存放領域模型的實體;
- Mapper實體映射層:EF對實體的關系配置后的映射,本示例采用的是EF Fluent API的方式來對實體在數據庫中的映射做詳細配置;
- Initializer初始化數據層:由於數據庫是通過微軟的ORM框架Entity Framework映射生成的,所以在數據庫初始化時,我們可以添加我們所需要的初始化數據;
- Factory 工廠反射層:主要用於服務層調用領域實現層的解耦操作;
- Service服務層:注意這里只是一個示例,具體可以使用WCF、Web Api、WebService來作為服務層,本示例就用WebService來做一下說明;
- Web展現層:主要是利用Asp.net mvc4+EasyUI來作為前端頁面的效果展示和操作。
注意:解決方案文件夾在本地磁盤不會自動生成,這里我們手動建立一下,然后把各自的工程建立在對應的文件夾里面。

- 示例環境
- 系統:Windows 7 X64 旗艦版
- 開發工具:Visual studio 2013 旗艦版
- 數據庫:Sql Server 2008 r2
- ORM框架:Entity Framework 6以上版本
- IOC容器:Ninject 3.2.0.0
- 展現層:Asp.net MVC4 +EasyUI 1.4.3
- 代碼管理:Visual Studio Online(TFVC)
注意:這是我本機的版本,大家的開發環境可能有所不同。Visual studio只要能支持Visual Studio Online(TFVC)的就行,
后面會講到如何使用。數據庫可以是2005 2008 2012 版本的應該都可以支持映射。EasyUI可以是1.3.5以上的版本。Asp.net
MVC采用的是4的版本,Ninject就用它里面自帶的版本呢。
系統目標
- 采用EF6完成業務實體到數據庫表的完整映射
- 利用Ninject和工廠反射模式完成對接口和實現類的解耦,減少依賴
- 實現各模塊的基本操作和頁面設計
- 實現不同角色用戶登錄系統后可以對不同的頁面模塊進行操作
備注
- 由於代碼需要架設到雲端,所以大家必須注冊一個微軟的賬號來登錄Visual Studio Online管理我們的代碼,雖然示例演示的時候只有一個人,但是Visual Studio Online可以免費提供5個賬號的團隊使用權。
- 本來想着簡單點的,但真正說起來的時候發現東西還是挺多的。后面就會按照這個完整的示例來一一講解,等完成后會提供代碼的下載。但是不知道會有多少篇幅,為了讓大家有點耐心,我還是先截取幾個成果圖吧,希望大家多多支持和指教。




