現在我在類似的問題上工作。我已經做了下一個:
- 創建未來assemplities:
SF.Contracts - 只是定義ServiceCotnracts和DataContracts。顯然,所有的數據合同都可以像EF中的POCO類一樣使用(但我不使用t4或其他生成器 - 所有POCO類和DataContext都是手動編寫的,因爲我需要使用非常簡單的bad database)。 SF。
SF.DataAccessObjects - 在這個assemity中,我實現了我的edmx和DataContext。 SF.Services - WCF服務的實現。
因此,一個大量選擇WCF方法的旁邊簽署和實施:
public List<Vulner> VulnerSelect(int[] idList = null, string[] navigationPropertiesList = null)
{
var query = from vulner in _businessModel.DataModel.VulnerSet
select vulner;
if (navigationPropertiesList != null)
navigationPropertiesList.Select(p =>{query = ((ObjectQuery<Vulner>)query).Include(p);
return true; });
if (idList != null)
query = query.Where(p => idList.Contains(p.Id));
return query.ToList();
}
,你可以使用這個方法是這樣的:
WCFproxy.VulnerSelect(new[]{1,2,3},new[]{"SecurityObjects", "SecurityObjrcts.Problem"});
,這樣,你有沒有問題序列化,導航屬性等,您可以清楚地指出哪些NavigationProperties必須加載。
p.s.:索裏對我的英語不好:)
檢查這個答案,以及如何避免把EF實體依賴於上述DAL層:http://stackoverflow.com/questions/7474267/mvc3-and-entity-framework/ 7474357#7474357 –
你檢查了一些「相關」的問題嗎?之前有過很多關於這個話題的討論。請參閱http://stackoverflow.com/questions/725348/poco-vs-dto和http://stackoverflow.com/questions/3779508/what-is-the-best-practice-for-sending-data-to-the -client-poco-or-dto – InSane