2

我在查询表达式页面上找不到任何回答我问题的内容。简而言之,我可以更新任何 SQL Server 数据列,除了type XML. 下面的示例代码与我的实际代码仅在列名称上有所不同。

let update () : unit =
    let dbctx = DBSchema.GetDataContext() // The DBSchema type has already been defined as a SimpleDataContextType
    query {
        for row in dbctx.My_Table do
        select row
    }
    |> Seq.iter (fun s ->
        s.IntCol <- 10 // Works
        s.VarcharCol <- "Varchar value" // Works
        /////
        s.XmlCol.Add(new XElement(XName.Get "ChildNode")) // Does not work!
        /////
        let x = s.XmlCol
        x.Add(new Xelement(XName.Get "ChildNode"))
        s.XmlCol <- x // Still does not work!
        /////
        dbctx.DataContext.SubmitChanges())

XML columnSQL Server 中的永远不会改变。它保持不变,即使其他列按照指示发生变化。

是否有不同的推荐方式SQL Server XML columns从 F# 更新?

在此先感谢您的帮助。

4

1 回答 1

3

除非您创建一个新XElement实例,否则引用相等性仍然成立,并且 Linq-to-SQL 无法检测XmlCol.

以下示例应按预期工作

let x = s.XmlCol
x.Add(new XElement(XName.Get "ChildNode"))
s.XmlCol <- new XElement(x)

当您考虑F#中的默认结构相等时,这种行为会令人困惑。

您可以阅读类似的线程Linq-to-SQL With XML Database Fields -- 为什么这样有效?另一种解释。

于 2013-01-15T00:04:38.507 回答