linq更新部分資料時遇到的問題及解決辦法

2021-09-06 08:01:00 字數 1621 閱讀 3579

問題:因為每次更新的時候只是某個類的一部分,但是這個類的屬性比較多.

更新函式如下

static void updatere(log n)}}

staticvoidmain(stringargs)

這時候產生的sql如下

select [t0].[logid], [t0].[logmessage], [t0].[x]

from [dbo].[log] as [t0]

where [t0].[logid] = @p0

-- @p0: input int (size = 0; prec = 0; scale = 0) [1]

update [dbo].[log]

set [logmessage] = @p1, [x] = @p2

where [logid] = @p0

-- @p0: input int (size = 0; prec = 0; scale = 0) [1]

-- @p1: input varchar (size = 4; prec = 0; scale = 0) [***x]

-- @p2: input nchar (size = 10; prec = 0; scale = 0) [null]

問題就是這樣做會將你沒有符過值的都更新為null,我繼續做實驗,將main函式改為如下

staticvoidmain(stringargs)

會引發"已嘗試 attach 或 add 實體,該實體不是新實體,可能是從其他 datacontext 中載入來的。不支援這種操作。"異常,沒找到把n1從它的datacontext脫離的辦法.所以我使用如下的解決方案:

在log的部分類中書寫轉殖方法:

publicpartialclasslog

}staticvoidmain(stringargs)

生成的sql語句如下

select [t0].[logid], [t0].[logmessage], [t0].[x]

from [dbo].[log] as [t0]

where [t0].[logid] = @p0

-- @p0: input int (size = 0; prec = 0; scale = 0) [1]

update [dbo].[log]

set [logmessage] = @p1

where [logid] = @p0

-- @p0: input int (size = 0; prec = 0; scale = 0) [1]

-- @p1: input varchar (size = 4; prec = 0; scale = 0) [***y]

感覺這個clone()方法也不是好的解決方案,大家有什麼好的想法麼?

網友:@gray zhang 的這個方法我覺得不錯,整理如下:

staticvoidupdate(intid,actionupdater)

}publicstaticvoidset(logl)

staticvoidmain(stringargs)

linq更新部分資料時遇到的問題及解決辦法

問題 因為每次更新的時候只是某個類的一部分,但是這個類的屬性比較多.更新函式如下 static void updatere log n updatere n1 static void main string args 會引發 已嘗試 attach 或 add 實體,該實體不是新實體,可能是從其他 d...

poi批量匯入資料時部分資料丟失

解決思路 debug 發現physicalnumberofcells代表的單元格數量與 列數不符,這就意味著最後兩列的單元格根本沒有讀取到。查閱資料 發現獲取單元格列數使用的是getphysicalnumberofcells方法,而該方法讀取的是不為空的單元格總列數,恰好匯入的 中有兩列為空的單元格...

關於從遠端取資料更新到本地時遇到的時間問題

近日部署了乙個從遼寧招辦取瀋陽的資料的乙個專案,取回來的資料中有時間字段,奇怪的現象是,只要是從瀋陽取得的時間,更新到遼寧的時候,肯定會慢13個小時,百思不得其解.讓手下用各種方法去找原因,得知 1.從瀋陽本地的資料庫直接讀出來的資料沒有問題 2.從北京取瀋陽的資料沒有問題 3.資料一到遼寧就變 從...