2012-03-01 4 views
0

Je reçois un message d'erreur de comparaison lorsque j'essaie de mettre à jour un enregistrement à l'aide de LINQ.Erreur de comparaison 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; 

(Ci-dessous la fonction de création de l'utilisateur)

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; 
     } 
    } 

Je ne suis pas tracassé au sujet si mon code est propre ou non au moment, je suis juste reçois cette erreur et il commence à agacer moi.

Voici le tableau principal scriptée comme Crées (Vous pouvez voir les paramètres de champ:

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] 

Lors de la mise à jour sur le terrain avec les mêmes informations qui est déjà dans ce que je reçois l'erreur:

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

Quelqu'un sait-il pourquoi cela pourrait se produire?

Merci, Oliver

+0

'Je ne suis pas dérangé si mon code est propre ou pas en ce moment 'Mais vous attendez que nous le lisions –

+0

C'est votre choix si vous voulez m'aider ou non. Mon code commence généralement désordonné et à la fin de ces sections le développement est nettoyé pour avoir l'air propre et mieux préformer. Tout ce que je veux dire par là, c'est que je ne voulais pas que les gens perdent leur temps à nettoyer mon code pour moi. En outre, mon code peut être un peu long, mais ce n'est pas "que" désordonné. À la fin de la journée, ne vous embêtez pas à poster quelque chose qui n'est pas contributif. J'ai dû lire le code beaucoup plus désordonné que cela auparavant. –

+0

@OliverBaker: Votre code était très bien. Je pouvais comprendre tout ce dont j'avais besoin en le regardant pendant moins d'une minute. –

Répondre

1

Modifiez les colonnes Additional_OtherInformation, Machine_Description_Primary et Machine_Description_Secondary du type de données obsolète TEXT au type de données VARCHAR(MAX). Actualisez vos mappages de colonnes et vous devriez tous être définis.

+0

Savez-vous pourquoi cela se passe? Est-ce que je le compare quelque part et que je le lie juste assez pour que je l'aie raté? –

+0

Difficile à dire. Il est possible que L2S veuille effectuer une sorte de vérification d'égalité pour voir si la valeur a été modifiée (partie de la concurrence optimiste). De toute façon, vous devriez aller de l'avant et remplacer chaque référence à TEXT, NTEXT, ou IMAGE dans votre base de données à VARCHAR (MAX), NVARCHAR (MAX) et VARBINARY (MAX), respecively, qui sont les types de données supportés. –

+0

Merci pour votre aide! Je suis encore assez nouveau pour les types SQL, et comme je ne comparais pas ces champs, je ne pensais pas que cela aurait été un problème. Eh bien, merci! –

Questions connexes