4

我有一个问题。也许你们中的一位专家可以在这里提供帮助。我正在查询的表有 2 个 xml 列。我也需要对这些列中的 xml 数据执行查询(在我的高级搜索功能中)。问题是我正在使用实体框架,它不支持。即使我尝试执行“ObjectQuery.Execute”,它也会导致语法错误。那么我在这里有什么选择?

  1. 修改表并为我需要查询的 XML 中的数据添加列,以便我可以使用实体框架执行操作?
  2. 只是为了高级搜索使用 ODBC 并在我可以使用 SQLXml 的地方进行常规查询?这里的潜在威胁是什么[例如多个连接、太多连接、设计/架构师的可憎性等]?
  3. 或者任何人都可以提出更好的解决方案吗?

谢谢,

阿里纳希德

4

1 回答 1

2

EF 将 SQL Server XML 类型列映射到字符串。所以对于这个定义:

CREATE TABLE [dbo].[XmlData](
[ID] [int] IDENTITY(1,1) NOT NULL,
[XmlTestColumn] [xml] NOT NULL
)

您将拥有以下实体:

public partial class XmlData
{
    public int ID { get; set; }
    public string XmlTestColumn { get; set; }
}

并且能够将字符串加载到 XmlDocument 等中。这是一种方法。

如果您希望针对 SQL Server 发出本机 XML 查询,则需要

  1. 定义或选择合适的实体类型;
  2. Database.SqlQuery与您的 XML 查询一起使用:

    var query = context.Database.SqlQuery(@"SELECT it.Id, it.Name, it.SomeData, t2.someotherdata FROM Table1 as it CROSS APPLY ...");

ObjectQuery针对概念模型工作,不支持本机查询。

于 2012-11-26T02:22:06.187 回答