2012-03-01 86 views
0

嘗試使用LINQ更新記錄時出現比較錯誤消息。LINQ比較錯誤

var tools = from tl in MVCWebsite.MvcApplication.DataContext.tblTools 
               where tl.pk_fk_Environment == model.Environment 
               && tl.pk_fk_Classification == model.Classification 
               && tl.pk_ToolNumber == model.ToolNumber 
               select tl; 
     Models.Database.tblTool updatingTool = tools.First(); 
     //try 
     //{ 

     if (createPerson(model.ToolEngineer, true) != null) 
      updatingTool.fk_Engineer = model.ToolEngineer; 
     else 
      updatingTool.fk_Engineer = null; 

     updatingTool.fk_BuiltBy = model.ToolBuiltBy; 

     if (createPerson(model.ToolBuiltBy, true) != null) 
      updatingTool.fk_BuiltBy = model.ToolBuiltBy; 
     else 
      updatingTool.fk_BuiltBy = null; 
     if (createPerson(model.ToolDesignedBy, true) != null) 
      updatingTool.fk_Designer = model.ToolDesignedBy; 
     else 
      updatingTool.fk_Designer = null; 
     updatingTool.DateOfBuild = model.DateOfBuild; 
     updatingTool.Machine_Name_Primary = model.ToolPrimaryMachineName; 
     updatingTool.Machine_Description_Primary = model.ToolPrimaryMachineDescription; 
     updatingTool.Machine_Name_Secondary = model.ToolSecondaryMachineName; 
     updatingTool.Machine_Description_Secondary = model.ToolSecondaryMachineDescription; 
     updatingTool.MERNumber = model.MERNumber; 
     updatingTool.AssetNumber = model.AssetNumber; 
     updatingTool.Additional_Cavities = model.AdditionalFields.Cavities; 
     updatingTool.Additional_Gate = model.AdditionalFields.TypeOfGate; 
     updatingTool.Additional_Shrinkage = model.AdditionalFields.Shrinkage; 
     updatingTool.Additional_DieClearance = model.AdditionalFields.DieClearance; 
     updatingTool.Additional_Field1 = model.AdditionalFields.Additional1; 
     updatingTool.Additional_Field2 = model.AdditionalFields.Additional2; 
     updatingTool.Additional_Field3 = model.AdditionalFields.Additional3; 
     updatingTool.Additional_Field4 = model.AdditionalFields.Additional4; 
     updatingTool.Additional_OtherInformation = model.AdditionalFields.OtherInformation; 

(下面是創建用戶功能)我不打擾一下如果我的代碼是乾淨與否,此刻

private Models.Database.tblPerson createPerson(string user) 
    { 
     if (user == null || user == "") 
      return null; 
     var people = from p in MVCWebsite.MvcApplication.DataContext.tblPersons 
        where p.pk_PersonID == user 
        select p; 
     if (people.Count() == 1) 
     { 
      return people.First(); 
     } 
     else 
     { 
      Models.UserInformation ui; 
      ui = MVCWebsite.MvcApplication.DisplayUser(user); 
      if (!ui.Exists) 
       return null; 
      tblPerson person = new tblPerson() 
      { 
       pk_PersonID = user, 
       FirstName = ui.GivenName, 
       LastName = ui.Surname, 
       Email = ui.EmailAddress 
      }; 
      return person; 
     } 
    } 

,我只是得到這個錯誤,並開始騷擾我。

這裏是主表腳本作爲創建(所以你可以看到現場設置:

CREATE TABLE [dbo].[tblTool](
    [pk_fk_Environment] [varchar](2) COLLATE Latin1_General_CI_AS NOT NULL, 
    [pk_fk_Classification] [varchar](3) COLLATE Latin1_General_CI_AS NOT NULL, 
    [pk_fk_Style] [varchar](4) COLLATE Latin1_General_CI_AS NULL, 
    [pk_ToolNumber] [int] NOT NULL, 
    [DateOfBuild] [datetime] NULL, 
    [fk_Engineer] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [fk_Designer] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [fk_BuiltBy] [varchar](20) COLLATE Latin1_General_CI_AS NULL, 
    [MERNumber] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [AssetNumber] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [fk_Material] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [fk_LocationCompany] [varchar](20) COLLATE Latin1_General_CI_AS NULL, 
    [fk_LocationCountry] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [fk_LocationRegion] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [fk_Status] [varchar](10) COLLATE Latin1_General_CI_AS NULL, 
    [Machine_Name_Primary] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [Machine_Description_Primary] [text] COLLATE Latin1_General_CI_AS NULL, 
    [Machine_Name_Secondary] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [Machine_Description_Secondary] [text] COLLATE Latin1_General_CI_AS NULL, 
    [OldToolID] [varchar](100) COLLATE Latin1_General_CI_AS NULL, 
    [Additional_Cavities] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [Additional_Gate] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [Additional_Shrinkage] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [Additional_DieClearance] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [Additional_Field1] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [Additional_Field2] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [Additional_Field3] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [Additional_Field4] [varchar](50) COLLATE Latin1_General_CI_AS NULL, 
    [Additional_OtherInformation] [text] COLLATE Latin1_General_CI_AS NULL, 
CONSTRAINT [PK_tblTool] PRIMARY KEY CLUSTERED 
(
    [pk_fk_Environment] ASC, 
    [pk_fk_Classification] ASC, 
    [pk_ToolNumber] ASC 
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

當與已在它同信息更新的領域我得到的錯誤:

SQL Server does not handle comparison of NText, Text, Xml, or Image data types. 

是否有人知道爲什麼會發生?

感謝, 奧利弗

+0

'我不打擾我的代碼目前是否乾淨或沒有'但是你期望我們讀它 – 2012-03-01 19:55:06

+0

這是你的選擇,如果你想幫助我或沒有。我的代碼通常是亂七八糟的,在那個部分的結尾,開發得到清理,看起來更乾淨,更好。 我的意思是,我不希望人們浪費他們的時間清理我的代碼。 此外,我的代碼可能有點冗長,但它不是「那」雜亂。 在一天結束時,請勿打擾發佈不是貢獻的內容。之前我不得不閱讀比這更糟糕的代碼。 – 2012-03-01 21:01:50

+0

@OliverBaker:你的代碼很好。我可以在一分鐘之內看清楚所需的一切。 – 2012-03-01 21:18:31

回答

1

將您的Additional_OtherInformation,Machine_Description_PrimaryMachine_Description_Secondary列從已棄用的TEXT數據類型更改爲VARCHAR(MAX)數據類型。刷新你的列映射,你應該全部設置。

+0

你知道這是爲什麼發生嗎?我是否在某處進行比較,只是將它們綁定得足夠讓我錯過了它? – 2012-03-01 19:57:21

+0

很難說。很可能是L2S想要執行某種平等檢查來查看該值是否已經改變(樂觀併發的一部分)。無論採用哪種方法,都應該繼續,將數據庫中TEXT,NTEXT或IMAGE的每個引用都替換爲VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX),這是支持的數據類型。 – 2012-03-01 20:01:19

+0

感謝您的幫助!我對SQL類型還很陌生,因爲我沒有比較這些字段,所以我不認爲這會是一個問題。哦,謝謝! – 2012-03-01 21:04:08