2010-10-21 145 views
1

我有一個返回相同的列一個表中的基本觀點(給予或採取1場)實體框架,映射視圖以表

在我的DAL代碼

,我在一些然而返回MyTableObject的列表,我會調用視圖來返回相同的數據,但來自不同的來源。

List<MyTableObject> tableObjects = new List<MyTableObject>(); 
if (case1) 
    tableObjects = entities.MyTableObjects.Where(criteria).ToList(); 
else 
    tableObjects = entities.MyViewObjects.Where(criteria).ToList(); // <-- This will obviously break 
return tableObjects; 

有沒有辦法映射視圖實體作爲表實體返回? (除了讓表和視圖實現相同的接口並返回該接口),我想保持返回類型爲MyTableObject。

我碰到Auto Mapper,但不知道這是否會適合這個場景..

回答

2

看起來像我找到了一個涼爽的解決方案,這個..

起初我試圖實現接口的做法和遇到一些casting issues(使用我的旁邊建造謂詞接口),並且還具有創造局部類的接口每個實體實現接口..

的答案.. POCOs

Iused Poco Template for EF,而不是簡單地編輯xxxPocoGenerator.Context.tt以從MyViews集合(一行)返回MyTable對象。

public ObjectSet<Trade> v_Trade { 
     get { return _v_Trade ?? (_v_Trade = CreateObjectSet<Trade>("Trades")); } 
} 

好和容易..

+0

我猜你會調用這個鴨打字。我喜歡。我與你在一起,因爲我最初的想法是用接口自殺。我更喜歡你的方法。 – 2012-01-10 23:15:57

2

你可以寫(在模型或CommandText,而無需創建數據庫對象)的存儲過程可以簡單的叫「選擇*從視圖「。然後create Function Import用於此過程並將返回類型設置爲MyTableObject。