2013-02-14 80 views
2

我想在我的數據庫中使用Linq在C#中的現有值進行更新。更新與Linq導致錯誤的NVarChar(MAX)列

我實例變量:

var projectTrackingEntity = context.project_trackings.Single(pt => pt.project_id == projectId); 

然後我更新的動作列(它是一個NVarChar(MAX)),但我檢查,如果它已經有一個動作。如果是這樣,我只是用分號加上它,例如。動作1,動作2

當我打電話:

context.SubmitChanges(); 

我得到這個錯誤,而調試:

System.NotSupportedException:SQL Server不處理的比較 NTEXT,文本,XML,或圖像數據類型。

我試過設置UpdateCheck = UpdateCheck.Never,但是這並沒有解決問題。

編輯:添加,我更新的操作代碼(變量「行動」是一個字符串)

var actions = projectTrackingEntity.action.Split(';'); 
bool equalActions = false; 
foreach (string a in actions) 
{ 
    if (string.Equals(a, action, StringComparison.CurrentCultureIgnoreCase)) 
    { 
     equalActions = true; 
     break; 
    } 
} 
if(!equalActions) 
{ 
    projectTrackingEntity.action = string.IsNullOrEmpty(projectTrackingEntity.action) ? //if 
     action : //true 
     projectTrackingEntity.action + ';' + action; //false 
} 

context.SubmitChanges(); 
+0

你確定sql server中的列是nvarchar而不是ntext,因爲錯誤提示? – Dan 2013-02-14 17:39:48

+0

我自己添加了列,它確實是一個nvarchar(MAX) – 2013-02-14 18:29:30

回答

2

方法1:

爲了解決這個問題,只是open the dbml filexml editor和設置所述updatecheck to Never如下:

<column canbenull="true" dbtype="Xml" name="PermissionsXml" type="System.Xml.Linq.XElement" updatecheck="Never"></column> 

甲基OD 2:

更改你的領域中爲VARCHAR(max)

方法3:

變化UpdateCheck的到UpdateCheck.WhenChanged

我希望這會幫助你。

+0

我加了UpdateCheck =「Never」,仍然不起作用。 該列最初是一個varchar,我認爲問題是varchar不能容納';'所以我將它改爲nvarchar。這沒有改變任何東西。 – 2013-02-14 18:59:27

+0

@ AdamCalvert-Piotrowicz嘗試做「方法3」 – Sampath 2013-02-14 20:41:59

+0

這並沒有解決問題,同樣的錯誤發生 – 2013-02-14 20:58:21

0

幾乎看起來像你的DAL類拿起屬性作爲錯誤的類型在它的自動檢測?你能否在設計師手動指定類型爲NVARCHAR(MAX),而不是其它任何可能認爲是的?

+0

在生成的.cs文件中顯示爲[global :: System.Data.Linq.Mapping.ColumnAttribute(Storage =「_ action」,DbType =「NVarChar(MAX)」,UpdateCheck = UpdateCheck.Never)] 而在XML是。 SQL Server中的類型也是nvarchar(MAX)。我不明白爲什麼這不起作用,因爲正在更新的其他列不會造成問題 – 2013-02-14 20:55:00

+0

該列是否必須是MAX?你可以逃避它是NVARCHAR(4000)或類似的東西? (甚至8000) – 2013-02-14 21:43:49

+0

它不一定是最大的,但即使它不是它仍然導致同樣的問題。 – 2013-02-15 13:32:14