2012-06-05 78 views
1

我最近經歷了修改我的數據庫的過程,規範了很多實體。很顯然,我現在有比我更多的桌子了。我在網站上使用的大量數據是隻讀的,所以使用視圖非常簡單,但有些實體可能受益於非規範化檢索,但仍需要更新。需要的建議 - 使用規範化數據的實體框架

下面是一個例子。

A User may be a Member 
A Member may have a Profile 
A Member may have an Account 

另外我還有3個查找表。

總共有3個用戶表格和4個表格用於會員。

理想情況下,我可以從上面的表中創建2個視圖。

但是,用戶需要像屬於成員的實體那樣更新。此外,還有6個與用戶/成員相關的獨立表格,即FavouriteCategories,它們也需要不時更新和更新。

我掙扎拿出這樣做的最好的,最有效的方式。

我可以簡單地不使用的意見,並把所有的實體和查找到模型中,但我會依賴於EF產生retreival查詢。我讀過的東西表明EF不擅長處理加入的數據。

我可以添加這兩種視圖和表格,使用僅更新表。由於模型的重複性,複雜性以及EF模型功能的不足,這看起來很sl sl。

也許我可以用數據檢索的只讀視圖和創建存儲特效。我相信在存儲過程中使用EF的過程有些詭異,因此我可能會將存儲的過程與EF區分開來,只需傳遞參數並通過傳統方法調用SP即可。這又似乎是一箇中途之家。

我不會與.NET或EF經歷,所以想知道關於任我上面提到的方法或任何更好的方法來達致這一些可行的建議。我不想在這個階段攻擊edmx文件,因爲......這只是錯誤的。

我有幾個實體可以從正確的解決方案中受益。用戶示例是最簡單的,所以從正確的方法中可以獲得很多。

幫助和建議將非常感激。

回答

1

您想使用EF嗎?如果是使用第一種方法,根本不使用視圖,並允許EF處理所有事情或使用視圖和映射存儲過程來插入,更新和刪除操作的最後一種方法。

結合閱讀映射視圖和映射表進行修改是可能的,但它主要是第一個解決方案(允許EF來處理一切)與一些查詢優化的補充意見。

你不會找到更清潔的方法。提到的方法是針對您的問題的有效解決方案。唯一的問題是如果你想自己編寫SQL(查看和存儲過程)或讓EF來做到這一點。

最糟糕的方法是使用EF查詢和手動調用存儲過程進行更新,但在某些情況下,它也可能有用。