【问题标题】:Entity Framework EDMX Model & Stored Procs实体框架 EDMX 模型和存储过程
【发布时间】:2010-05-26 14:31:16
【问题描述】:

我是一个实体框架新手,我想知道我是否能够以我想要的方式使用它。我正在使用 Visual Studio 2010 和 .NET 4。

我有一个内容管理系统,它将所有数据存储在表的 xml 字段中。该表 - cmsContent - 仅包含两个字段,id 和 XmlNode

我想创建存储过程来查询 XML 字段以带回有意义的数据,在这种情况下是产品数据。比如……

选择 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 FROM cmsContent C 在哪里 C.xNode.query('data(/node[1]/@nodeTypeAlias)').value('.', 'VARCHAR(30)') = 'Product'

然后我想通过 EDMX 实体图将这些存储过程的输出映射到我的实体类。所以我想将上面的查询映射到一个名为 Products 的类。 products 类将是只读的,无需更新这些对象,因为这是通过 CMS 完成的。

这样可以使用整个框架吗?如果是这样,我无法让存储过程在 EDMX 图中生成所需的类,因为我使用向导时不会发生这种情况?

【问题讨论】:

    标签: entity-framework-4


    【解决方案1】:

    如果它是只读的,那么您可以为存储模型中的 EntitySet 提供 DefiningQuery。这本质上充当存储的只读视图,您可以根据需要定义结果形状。然后,您可以将其映射到实体或复杂类型(如果复杂类型是只读的,则可能更容易。)

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

    【讨论】:

      【解决方案2】:

      我认为您必须创建一个复杂类型,并将 SP 映射到此。看到这个MSDN article

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-03
        • 2013-03-19
        • 1970-01-01
        • 2012-04-13
        • 1970-01-01
        相关资源
        最近更新 更多