我是一个实体框架新手,我想知道我是否能够以我想要的方式使用它。我使用的是Visual Studio 2010和.NET 4。
我有一个内容管理系统,它将所有数据存储在表的xml字段中。表--cmsContent - 只包含两个字段,id和XmlNode
我想创建存储过程来查询XML字段以带回有意义的数据,在这种情况下是产品数据。 e.g ...
选择 C.id AS [Id], C.xmlNode.value('(/ node / data [@alias =''ProdName''])[1]','NVARCHAR(1024)')AS ProductName, C.xmlNode.value('(/ node / data [@alias =''ProdDesc''])[1]','NVARCHAR(1024)')AS ProductDescription 来自cmsContent C 哪里 C.xNode.query('data(/ node [1] / @ nodeTypeAlias)')。value('。','VARCHAR(30)')='产品'
然后我想通过EDMX enity图将这些存储过程的输出映射到我的实体类。所以我想将上面的查询映射到一个名为Products的类。产品类将是只读的,不需要更新这些对象,因为这是通过CMS进行的。
以这种方式使用entiry框架是否可行?如果是这样的话,因为我不能让Stored Procs在EDMX图中生成所需的类,因为当我使用向导时这不会发生?
答案 0 :(得分:1)
如果只是readonly,那么您可以在存储模型中为EntitySet提供DefiningQuery。这实际上充当了商店的只读视图,您可以根据需要定义结果形状。然后,您可以将其映射到实体或复杂类型(如果它是只读的,则复杂类型可能更容易。)
<Schema ...>
<EntityContainer ...>
<EntitySet Name="blah" EntityType="BlahModel.Store.blah">
<DefiningQuery>
select ... from blah
</DefiningQuery>
</EntitySet>
</EntityContainer>
...
</Schema>
答案 1 :(得分:0)
我认为您必须创建一个复杂类型,并将SP映射到此。请参阅此MSDN article。