【问题标题】:Cannot update SQL Server XML column from F#无法从 F# 更新 SQL Server XML 列
【发布时间】:2012-12-28 23:53:29
【问题描述】:

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

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())

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

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

提前感谢您的帮助。

【问题讨论】:

  • 是否抛出异常?
  • 不,没有。就像程序一直在和我的女朋友说话,并且学会了不理我。

标签: xml f# sql-update sql-server-2012


【解决方案1】:

除非您创建一个新的 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 -- Why does this work? 以获得另一种解释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多