Linq-to-SQL Mit XML-Datenbank-Felder — Warum funktioniert das?

Einige hintergrund: ich habe eine Datenbank, die ich verwenden möchten, linq-to-sql-update durch eine C# - Anwendung. Eine der Spalten in dieser Tabelle hat einen XML-Datentyp.

Jede andere Spalte in dieser Tabelle (, der nicht von einem XML-Datentyp) updates völlig in Ordnung, aber wenn ich ging, um änderungen an der XML-Feld, wird das Programm ausgeführt (scheinbar) korrekt, aber das Feld behält immer seine ursprünglichen Wert, nachdem ich laufen SubmitChanges().

Ich schaute mich um das internet und fand ein paar Beiträge über Microsoft Connect die Diagnose ähnliche Probleme-und schließlich stolperte auf die Lösung hier:

Zwingen XML-Feld aktualisieren, werden diese nicht tun:

XElement tmp = MyLinqObject.XmlField;
MyLinqObject.XmlField = null;
MyLinqObject.XmlField = tmp;

Statt, dass Kraft LINQ to update-XML-Spalte zuordnen, ein geklontes Objekt:

MyLinqObject.XmlField = new XElement (MyLinqObject.XmlField);

Kann ich bestätigen, dass dies tatsächlich zu funktionieren scheint, aber ich bin mir nicht ganz sicher, warum. Meine einzige Vermutung ist, dass die XmlField Eigenschaft hat eine Art eindeutige id auf dem heap, und, dass, indem Sie einen Klon, den Sie zugewiesen haben, es wird ein neuer eindeutiger Bezeichner. Wenn Linq erzeugt dann die Abfrage, es gar nicht zu versuchen, um zu sehen, wenn das Feld aktualisiert wurde, da es eine neue id, es ist einfach, Schreibe den Wert in die Datenbank. Aber, ich bin einfach nur spekulieren und hoffen, dass jemand anderes kann Ihnen ein besseres Verständnis, was Los ist hinter den kulissen.

BEARBEITEN: Adresse Jon ' s post, der Grund für das Problem (so wie es erklärt wird auf der MS-Connect-Website) ist, dass "das XML-Feld nicht aktualisiert, da Linq-to-SQL nicht handhaben das XElement.Changed-Ereignis".

Für meine Anwendung, der code, der arbeitet, landet auf der Suche etwas wie dieses:

MyXElementProperty.SetElementValue("Author", author);

MyXElementProperty = new XElement(MyXElementProperty);

Referenz (jemand, der Sie findet, diese Frage), auch die folgenden Werke:

MyXElementProperty = new XElement(MyXElementProperty);

MyXElementProperty.SetElementValue("Author", author);
InformationsquelleAutor jerhinesmith | 2009-03-27
Schreibe einen Kommentar