數據倉儲之DLL層介面設計

来源:http://www.cnblogs.com/weishuanbao/archive/2016/06/06/5564032.html
-Advertisement-
Play Games

...


  1 一、介面設計
  2 1.1. IBaseRepository.cs
  3 public interface IBaseRepository<T>
  4     {
  5         T Add(T entity);
  6         bool Update(T entity);
  7         bool Delete(T entity);
  8         IQueryable<T> LoadEntities(Expression<Func<T, bool>> whereLambda);
  9         IQueryable<T> LoadPageEntities<S>(int pageSize, int pageIndex, out int total, Expression<Func<T, bool>> whereLambda, Expression<Func<T, S>> orderbyLambda, bool isAsc);
 10 
 11     }
 12 1.2. ICompanyRepository.cs
 13 public interface ICompanyRepository:IBaseRepository<Company>
 14     {
 15         
 16     }
 17 二、介面實現
 18 2.1 BaseRepository.cs
 19 public class BaseRepository<T> where T:class,new()
 20     {
 21         private ObjectContext dbContext
 22         {
 23             get
 24             {
 25                 return EFDbContextFactory.GetCurrentDbContext();
 26             }
 27         }
 28         public virtual T Add(T entity)
 29         {
 30             dbContext.CreateObjectSet<T>().AddObject(entity);
 31             return entity;
 32         }
 33 
 34         public virtual bool Update(T entity)
 35         {
 36            
 37             dbContext.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Modified);
 38             return true;
 39         }
 40 
 41         public virtual bool Delete(T entity)
 42         {
 43             dbContext.ObjectStateManager.ChangeObjectState(entity,System.Data.EntityState.Deleted);
 44             return true;
 45         }
 46 
 47         public IQueryable<T> LoadEntities(Expression<Func<T, bool>> whereLambda)
 48         {
 49             return dbContext.CreateObjectSet<T>().Where(whereLambda).AsQueryable();
 50         }
 51         public IQueryable<T> LoadPageEntities<S>(int pageSize, int pageIndex, out int total, Expression<Func<T, bool>> whereLambda, Expression<Func<T,S>> orderbyLambda, bool isAsc)
 52         {
 53             total = dbContext.CreateObjectSet<T>().Where(whereLambda).Count();
 54             if (isAsc)
 55             {
 56                 return dbContext.CreateObjectSet<T>()
 57                                 .Where(whereLambda)
 58                                 .OrderBy(orderbyLambda)
 59                                 .Skip(pageSize * (pageIndex - 1))
 60                                 .AsQueryable();
 61             }
 62             else
 63             {
 64                 return dbContext.CreateObjectSet<T>()
 65                                 .Where(whereLambda)
 66                                 .OrderByDescending(orderbyLambda)
 67                                 .Skip(pageSize * (pageIndex - 1))
 68                                 .AsQueryable();
 69             }
 70         }
 71     }
 72 2.2 CompanyRepository.cs
 73  public class CompanyRepository : BaseRepository<Company>,ICompanyRepository
 74     {
 75         
 76     }
 77 三、IDbSession
 78 3.1 IDbSession.cs
 79 public  interface IDbSession
 80     {
 81        IMemberRepository MemberRepository { get; }
 82        IServiceTypeRepository ServiceTypeRepository { get; }
 83        IServiceRepository ServiceRepository { get; }
 84        ICompanyRepository CompanyRepository { get; }
 85        IProductGroupRepository ProductGroupRepository { get; }
 86        int SaveChanges();
 87     }
 88 3.2 DbSession.cs
 89 public class DbSession : IDbSession
 90     {
 91         private IMemberRepository _MemberRepository;
 92         private IServiceTypeRepository _ServiceTypeRepository;
 93         private IServiceRepository _ServiceRepository;
 94         private ICompanyRepository _CompanyRepository;
 95         private IProductGroupRepository _ProductGroupRepository;
 96 
 97         public IMemberRepository MemberRepository
 98         {
 99             get
100             {
101                 if (_MemberRepository == null)
102                 {
103                     _MemberRepository = new MemberRepository();
104                 }
105                 return _MemberRepository;
106             }
107         }
108 
109         public IServiceTypeRepository ServiceTypeRepository
110         {
111             get
112             {
113                 if (_ServiceTypeRepository == null)
114                 {
115                     _ServiceTypeRepository = new ServiceTypeRepository();
116                 }
117                 return _ServiceTypeRepository;
118             }
119         }
120 
121         public IServiceRepository ServiceRepository
122         {
123             get
124             {
125                 if (_ServiceRepository == null)
126                 {
127                     _ServiceRepository = new ServiceRepository();
128                 }
129                 return _ServiceRepository;
130             }
131         }
132 
133         public ICompanyRepository CompanyRepository
134         {
135             get
136             {
137                 if (_CompanyRepository == null)
138                 {
139                     _CompanyRepository = new CompanyRepository();
140                 }
141                 return _CompanyRepository;
142             }
143         }
144 
145         public IProductGroupRepository ProductGroupRepository
146         {
147             get
148             {
149                 if (_ProductGroupRepository == null)
150                 {
151                     _ProductGroupRepository = new ProductGroupRepository();
152                 }
153                 return _ProductGroupRepository;
154             }
155         }
156 
157         public int SaveChanges()
158         {
159             return EFDbContextFactory.GetCurrentDbContext().SaveChanges();
160         }
161 
162 
163         
164     }
165 3.3 EFDbContextFactory.cs
166  public class EFDbContextFactory
167     {
168         public static ObjectContext GetCurrentDbContext()
169         {
170             
171                 //線程內唯一
172                 ObjectContext dbContext = (ObjectContext)CallContext.GetData("dbContext");
173                 if (dbContext == null)
174                 {
175                     dbContext = new SimpleNewsContext();
176                     CallContext.SetData("dbContext", dbContext);
177                 }
178                 return dbContext;
179             }
180        
181     }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 做Java開發好幾年了,部署JavaWeb到伺服器上,一般都選擇Linux,Linux作為伺服器真是不二之選,高性能,只要熟悉Linux,操作快捷,效率很高。 總結一下工作中常用的Linux命令備忘: 一、文件操作相關命令 1.創建目錄 mkdir software 2.創建多級目錄 mkdir / ...
  • 昨晚犯了一個重大錯誤,運行了 本來是要刪除一個不重要的目錄的,結果在它的父目錄下運行了上面命令,結果。。。都沒了。。。 幸好資料庫文件沒有被刪掉,數據還在,網站程式被刪掉了,不久前有備份過,只好重新導入程式,再重新改設置,任務量還是挺大的。。。最後,還是恢復了,萬幸。。。 【總結】以後不要運行rm命 ...
  • 先創建一個文件:vim hi 取第2個欄位和第3個欄位: awk '{print $2,$3}' hi 註意{}中的,逗號會在輸出的時候轉變為空格 加入字元說明: 顯示整行: 指定欄位分隔符:-F 內建變數:NF NF:欄位數量, $NF代表最後一個欄位 NR:行數 /regular express ...
  • 註:所有內容均來源於網路 預處理器(Preprocessor) 1. 用預處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在這想看到幾件事情: 1). #define 語法 ...
  • 轉載自:http://www.centoscn.com/CentOS/2015/0528/5555.html 1. 1 Linux操作系統簡介 Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNI ...
  • 有的時候會碰見類似的苦逼需求, webview自適應實際內容高度 下麵有四種方法供使用 方法1:獲取webview中scrovllview的contentsize進行設置 1 2 3 4 5 6 -(void)webViewDidFinishLoad:(UIWebView *)webView{ CG ...
  • centos 6.5安裝vncserver 並開啟遠程桌面 (Telnet那個老師課堂上教過了,這裡就不講了。哈哈)(首先要讓虛擬機聯網,才能下載yum源。讓舍友開個WIFI,然後用NAT模式連接。不會的去百度。)1、下載vncserveryum install tigervnc tigervnc- ...
  • 首先介紹下,目前C#作為一門快速開發的語言,在面試的過程中需要註意的技術知識點,瞭解下麵的知識點對於初級工程師入職非常有幫助,也是自己的親身體悟。 1. 簡述 private、 protected、 public、 internal 修飾符的訪問許可權。 答 . private : 私有成員, 在類的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...