2

質問に答えたクエリ式のページには何も見つかりませんでした。つまり、のSQLServerデータ列を除くすべてのSQLServerデータ列を更新できます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 columnSQLServerのは変更されません。他の列が示されているように変更されても、同じままです。

SQL Server XML columnsF#から更新するための別の推奨される方法はありますか?

よろしくお願いします。

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-SQLWithXML Database Fieldsを読むことができます-なぜこれが機能するのですか?別の説明のために。

于 2013-01-15T00:04:38.507 に答える