2010-05-26 40 views
1

我是一個實體框架的新手,並且想知道我是否能夠以我想要的方式使用它。我正在使用Visual Studio 2010和.NET 4.我有一個內容管理系統,它將所有數據存儲在一個表的xml字段中。表 - cmsContent - 只包含兩個字段,id和XmlNode實體框架EDMX模型和存儲過程

我想創建存儲過程,查詢XML字段以帶回有意義的數據,在這種情況下爲產品數據。例如..

SELECT C.id AS [ID], C.xmlNode.value( '(/節點/數據[@alias = '' PRODNAME' '])[1]',「NVARCHAR(1024 )')AS ProductName, C.xmlNode.value('(/ node/data [@alias =''ProdDesc''])[1]','NVARCHAR(1024)')AS ProductDescription FROM cmsContent C WHERE (''''''VARCHAR(30)')='產品'

然後我想映射輸出的這些存儲過程通過EDMX enity圖表到我的實體類中。所以我想將上面的查詢映射到一個名爲Products的類。產品類將是隻讀的,因此不需要通過CMS升級這些對象。

這樣可以用這種方式使用entiry框架嗎?如果是這樣,因爲我無法讓Stored Procs在EDMX圖表中生成所需的類,因爲這在我使用嚮導時不會發生?

回答

1

如果它是隻讀的,那麼您可以在存儲模型中爲EntitySet提供一個DefiningQuery。這本質上充當商店的只讀視圖,您可以根據需要定義結果形狀。然後,您可以將其映射到實體或複雜類型(如果它是隻讀的,複雜類型可能會更容易)。

<Schema ...> 
    <EntityContainer ...> 
    <EntitySet Name="blah" EntityType="BlahModel.Store.blah"> 
     <DefiningQuery> 
     select ... from blah 
     </DefiningQuery> 
    </EntitySet> 
    </EntityContainer> 
    ... 
</Schema> 
0

我認爲你必須創建一個複雜的類型,並將SP映射到此。請參閱MSDN article