我正在編寫一個LINQpad腳本來匿名存儲在表的XML列中的XML對象的某些屬性。我可以很好地訪問數據,然後改變它,並通過LINQpad Dump(),它似乎被更新。但是,當我運行SubmitChanges()並從LINQ(或SQL Server)運行另一個查詢時,相關行尚未更新。LINQ SQL查詢,SubmitChanges未提交對數據庫的更改
我試過用Google搜索這個問題,我發現的一個常見問題與主鍵有關,我在SQLStudio中驗證了使用的表中確實有主鍵,所以我不認爲這是問題。
此外,您可以在第一行中看到我已將DataContext上的Log設置爲Console.Out。有了這個,我得到了幾行驗證我的第一個查詢(選擇)的作品。但是,在運行UpdateRecord函數或運行SubmitChanges之後,我沒有在控制檯中得到任何類型的UPDATE查詢,也許更新邏輯不正確?我在運行SubmitChanges之前添加了GetChangeSet()。Dump(),在ChangeSet中有0個更新和0個插入,確認我的UpdateRecord函數沒有正確更新任何東西。
void Main() {
Log = Console.Out;
AnonymiseCommand("MyCommandName");
}
void AnonymiseCommand(string command) {
// Note we need to pluralise the table name for the LINQ query
// Table is actually called ChangeSet_Detail
var results = ChangeSet_Details
.Where(c => c.Command.ToString().Contains(command))
.ToDictionary(row => (int) row.ChangeSetID,
row => row.Changes);
int commandCount = results.Count;
Print("Command count for " + command + " is " + commandCount + ".");
到目前爲止,一切正常,commandCount正確返回1,並且結果字典包含正確的值。接下來,我將迭代字典,並嘗試使用與匹配字典鍵的ID進行更新,並將XElement映射到鍵。
foreach (KeyValuePair<int, XElement> entry in results) {
AnonymiseXml(entry.Value);
UpdateRecord(entry.Key, entry.Value);
}
}
// This function isn't so important, it anonymises the attributes and seems to work
void AnonymiseXml(XElement xml) {
// anonymise attributes
var attributes = xml.Attributes();
foreach(var attr in attributes) {
attr.Value = new String('?', attr.Value.Length);
}
// repeat across child nodes
var kiddies = xml.Elements();
foreach (var kid in kiddies) {
AnonymiseXml(kid);
}
}
void UpdateRecord(int rowID, XElement newXml) {
ChangeSet_Detail entry =
(from c in ChangeSet_Details
where c.ChangeSetID == rowID
select c).Single();
entry.Dump();
entry.ChangeSetID = rowID;
entry.Changes = newXml;
entry.Dump();
GetChangeSet().Dump();
try{
SubmitChanges();
} catch(Exception e) {
e.Dump();
}
}
UpdateRecord函數是我試圖將更改提交給數據庫的地方。我傳入了當前正在查看的行ID以及新的XML元素。當我檢索條目時,似乎我的更改仍然有效,在第一個條目上。轉儲()我可以看到屬性是匿名的。我更改條目XML列(列名爲Changes),最後調用SubmitChanges()。
如果我然後在LINQpad或SQL Server中查詢表,我的更改沒有生效,並且屬性沒有被匿名化。
能否請您提供您的代碼執行的SubmitChanges()方法? – jcruz
SubmitChanges()是一個LINQ方法 – dahui
解決了它,輸入一個答案... – dahui