2012-03-01 112 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