在講解之前,先來看看解決方案的架構:
1、在nop.core下的domain裡建立乙個實體category;
using system.data.entity.modelconfiguration;
using nop.core.domain.catalog;
} }
3、在nop.data下建ef上下文介面idbcontext和物件nopobjectcontext:
idbcontext:
using system.collections.generic;
using system.data.entity;
using nop.core;
namespace nop.data
} nopobjectcontext:
using system;
using system.collections.generic;
using system.data;
using system.data.common;
using system.data.entity;
using system.data.entity.infrastructure;
using system.data.entity.modelconfiguration;
using system.linq;
using system.reflection;
using nop.core;
using nop.core.domain.catalog;
namespace nop.data
//public dbsetcategory
///
/// 自動載入所有的資料表對映類並對映到資料庫表(
這個函式是重點,這裡就是替代dbset屬性
)///
///
protected override void onmodelcreating(dbmodelbuilder modelbuilder)
//...or do it manually below. for example,
languagemap());
base.onmodelcreating(modelbuilder); }
///
/// 將乙個實體附加到context上和返回已附加這個實體(if it was already attached)
///
/// tentity
/// entity
/// attached entity
protected virtual tentity attachentitytocontext(tentity entity) where tentity : baseentity, new()
else
} public string createdatabasescript()
///
/// context附加實體
///
///
///
public new idbsetset() where tentity : baseentity
///
/// 執行儲存過程
///
///
///
///
///
public ilistexecutestoredprocedurelist(string commandtext, params object parameters) where tentity : baseentity, new()
} var context = ((iobjectcontextadapter)(this)).objectcontext;
if (!hasoutputparameters)
else
} } }
} 4、在nop.core下的data裡建立乙個介面irepository,**如下:
using system.linq;
namespace nop.core.data
} }
5、在nop.core下的data裡建立乙個實體efrepository.cs,**如下:
using system;
using system.data.entity;
using system.linq;
using nop.core;
using nop.core.data;
namespace nop.data
public t getbyid(object id)
public void insert(t entity)
catch (exception dbex)
error: ", validationerror.propertyname, validationerror.errormessage) + environment.newline;
var fail = new exception(msg, dbex);
fail);
throw fail; }
}public void update(t entity)
catch (exception dbex)
error: ", validationerror.propertyname, validationerror.errormessage);
var fail = new exception(msg, dbex);
fail);
throw fail; }
}public void delete(t entity)
catch (exception dbex)
error: ", validationerror.propertyname, validationerror.errormessage);
var fail = new exception(msg, dbex);
fail);
throw fail; }
}public virtual iqueryabletable
} private idbsetentities
} //todo implement idisposable inte***ce }
}6、在nop.services中建立icategoryservice和categoryservice:
icategoryservice:
using system.collections.generic;
using nop.core;
using nop.core.domain.catalog;
namespace nop.services.catalog
} categoryservice:
using system.collections.generic;
using system.linq;
using system.data.entity;
using nop.core.data;
using nop.core.domain.catalog;
using nop.data;
namespace nop.services.catalog ";
#endregion
#region fields
private readonly irepository_categoryrepository;
//private readonly dbprovide***ctory _dbprovide***ctory;
#endregion
#region ctor
public categoryservice()
#endregion
#region methods
///
/// gets all categories
///
/// a value indicating whether to show hidden records
/// categories
public virtual ilistgetallcategories(bool showhidden = false)
#endregion }
}
《企業應用架構模式》 分層
在系統的分層組織方式下,上層通過介面使用下層定義的各種服務,下層對上層一無所知。每一層都對自己的上層隱藏其下層的細節,因此第4層無需知道第2層的細節。分層的好處 1.可以專注理解某一層,無需過多了解其他層次 2.可以替換某層的具體實現,只要前後提供的服務 介面 相同即可 3.可以將層次間的依賴性減到...
企業架構模式 mdash mdash 分層
一 分層設計的基本概念 在分解複雜的軟體系統時,軟體設計者用的最多的技術之一就是分層。在計算機體系機構中,可以看到,到處都有分層的例子,最為典型的,就是儲存器的層次結構,如圖所示 圖1 計算機儲存器的層次模型 可以看到,儲存器的層次結構是按訪問速度 儲存容量等引數劃分的,不同的層次有不同的職責。cp...
接觸《企業應用架構模式》
國慶七天的長假,過得有些昏昏冉冉。那麼期待的長假,在狠狠飽睡幾天之後居然有點想上班了,唉,真是 j 啊 前天去南山新開業的書城,沒有找到 企業應用架構模式 martin fowler著 呵,今天早上在 china pub 上下了訂單,中午就收到書了。趕快看了前面幾章,真是暢快之極啊!雖然有些東西我也...