本系列目錄:使用ef構建企業級應用(一):主要講資料庫訪問基類irepository及repository 的實現
使用ef構建企業級應用(二):主要講動態排序擴充套件的實現
使用ef構建企業級應用(三):主要講靈活的構建查詢條件表示式expression>.
使用ef構建企業級應用(四):主要講下在mvc環境中前端開發中如何使用,及乙個例項原始碼包
在前面三篇文章中,我們大致的描述了使用ef如何方便的實現資料持久化,我們簡要的回憶下都有那些關鍵的內容段我們先來看看我們在實際專案中是如何使用的,如果你對這個寫法有興趣那再往下看(查詢介面我們採用jqgrid來展示資料)那麼前端在使用mvc模式的時候,如何方便將我們前面所實現的銜接起來呢? 我們今天就來**一下這個問題.
也許你很快就發現了上述**中有兩個陌生的方法,構建查詢條件及從資料庫獲取資料,我們分別來看一下這兩個方法中都幹了什麼.///
/// 查詢產品列表
///
///
public actionresult getproductlist()
catch (exception ex)
return content(json);
}
/// /// 獲取頁面分頁查詢條件
///
/// 待查詢的實體
/// 頁面查詢轉化型別
///
protected efqueryparamgetqueryparam()
where tentity : class
where tpgqueryexp : class, iefqueryexpression, new()
bool issordasc = false;
if (!string.isnullorempty(request.querystring["sord"]))
}int pagesize = system.convert.toint32(request.querystring["rows"]);
int pageindex = system.convert.toint32(request.querystring["page"]) - 1;
iefqueryexpressionexp = null;
if (!string.isnullorempty(request["d"]))
catch
}if (exp == null)
exp = new tpgqueryexp();
efqueryparamret = new efqueryparam(exp, sidx, issordasc, pageindex, pagesize);
return ret;
}
然後我們來看一下,**中有個陌生的物件pgqueryproductexp,那麼他又做了什麼呢?也許你已經猜到了,這個就是頁面查詢轉化條件的,來簡要的看一下是如何定義的
///
/// 頁面查詢產品條件
///
public class pgqueryproductexp : iefqueryexpression
public string name
public string specification
public guid categoryid
public int enableflag
public pgqueryproductexp()
public expression> getexpression()
return exp.getexpression();
}
其次我們來看一下在sysservice 這個服務層中,我們是如何實現查詢的
///
/// 查詢獲取產品資料
///
/// 查詢引數
/// 返回符合條件的記錄總數
///
public ilistgetproductlist(efqueryparamqueryparam, out int total)
if (lst != null)
lst = lst.select(o => o.getjsonentity()).tolist();
return lst;
}
/// /// 封裝查詢引數
///
/// 引數型別
public abstract class queryparam
/// /// 排序字段
///
public string orderpropertyname
/// /// 是否是公升序排序,為false時則對orderpropertyname採取降序排序
///
public bool isascsort
/// /// 分頁查詢,查詢第幾頁
///
public int pageindex
/// /// 分頁查詢,每頁顯示記錄數
///
public int pagesize
/// /// 指示是否是分頁查詢
///
public bool ispagingquery }
}/// /// ef 實現的 queryparam
///
/// 條件關聯實體型別
public class efqueryparam: queryparam>> where tentity : class
/// /// 例項化新的 efqueryparam 例項
///
/// 查詢條件
/// 排序屬性欄位名
/// 是否是公升序排序,false為降序排序
/// 分頁查詢,查詢第幾頁
/// 分頁查詢,每頁顯示記錄數
public efqueryparam(iefqueryexpressionexp, string orderpropertyname,
bool isascsort, int pageindex, int pagesize) :
this(exp.getexpression(), orderpropertyname, isascsort, pageindex, pagesize)
如何構建企業級的ESB?
1 服務匯流排 esb 適合傳統企業系統應用下系統間的小報文 短訊息同步服務互動場景 服務框架 dubbo 適合網際網路系統應用下系統間的小報文 短訊息同步服務互動場景 如果服務過少,不打算進行服務治理的話,其實無需esb dubbo,直接選擇ws即可。2 mq適合系統間的可靠小報文 短訊息非同步服...
關於Docker的企業級應用
難怪docker正在迅速發展。docker,乙個開源專案。僅僅兩年,docker價值近10億美元,最近獲得了9500萬美元的資金。令人激動的是,我們看到有這麼多開發者對這個專案的熱情。然而,我將在下面討論企業使用docker本身是不夠的。許多企業it團隊解決這兩個問題 首先,開發者和運維者在優先順序...
企業級快取系統varnish應用
隨著公司業務快速發展,公司的電子商務平台已經聚集了很多的忠實粉絲,公司也拿到了投資,這時老闆想通過一場類似雙十一的活動,進行一場大的 屆時會有非常多的粉絲訪問 你的總監與市場部門開完會後,確定活動期間會有平常10倍以上的訪問請求,總監要求大幅增加 容量,除了去擴容伺服器之外,還有沒有其他辦法呢?如今...