2012-11-25 270 views
4

我有一個問題。也許你們中的一位專家可以在這裏幫忙。我查詢的表格有2個xml列。我需要對這些列中的xml數據執行查詢(在我的高級搜索功能中)。問題是我正在使用實體框架,它不支持。即使我嘗試執行「ObjectQuery.Execute」,它也會導致語法錯誤。那麼我在這裏有什麼選擇?實體框架查詢Xml

  1. 修改表格併爲我需要查詢的XML中的數據添加列,以便我可以使用Entity Framework執行操作?
  2. 只爲高級搜索使用ODBC,並做常規查詢,我可以使用SQLXml?這裏存在哪些潛在的威脅(如多重連接,太多連接,設計/建築師等)?
  3. 或者任何人都可以提出更好的解決方案嗎?

感謝,

阿里Nahid

+0

請在例外情況中添加一些細節。正如我的答案中所述,可以使用EF處理XML。 –

+0

我想做這樣的事情:

 SELECT it.Id, it.Name, it.SomeData, it2.someotherdata FROM Table1 as it CROSS APPLY it.XmlData.nodes('/FORM/PAGES/PAGE/FIELDS/FIELD[@name="LOCATION"]') location(tRef), Table2 as it2 WHERE it.Id = it2.Table2RefId AND it.Live = 1 AND location.tRef.value('.', 'VARCHAR(MAX)') LIKE '%Venn%' ORDER BY id DESC 

回答

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的查詢= context.Database.SqlQuery(@「SELECT it.Id,it.Name,it.SomeData,t2.someotherdata FROM表1,因爲它CROSS APPLY。 ..「);

ObjectQuery對於概念模型工作並且不支持本地查詢。

+0

感謝您的回答。但這不是我的問題。這樣我需要首先在數據庫中查詢,而不用查詢表格的XML列中的XMLData。然後我將不得不迭代結果集並查詢XML數據。 但是SQL Server 2005中還有另外一個功能可以執行XMLSQL查詢。在上面的帖子中看到我對你的評論的評論。 謝謝。 –

+1

@AliNahid謝謝澄清,這是有道理的。我已經更新了答案。 –

+0

感謝您的回答。說得通。但我不能確認它現在是否工作,因爲我正在運行.NET4,因此我的System.Data.Entity庫中沒有Database.SqlQuery。爲此,我將不得不安裝4.5覆蓋4.0。但我不能這樣做,除非我測試我的當前應用程序中沒有任何內容和服務器上一樣(因爲IIS + Umbraco上有多個應用程序[這是我害怕的地方])。遺憾的是,這可能聽起來像是一個危險的更新。 –