Ошибка сравнения LINQ - PullRequest
0 голосов
/ 01 марта 2012

Я получаю сообщение об ошибке сравнения при попытке обновить запись с помощью 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.

Кто-нибудь знает, почему это может происходить?

Спасибо, Оливер

1 Ответ

1 голос
/ 01 марта 2012

Измените столбцы Additional_OtherInformation, Machine_Description_Primary и Machine_Description_Secondary с устаревшего типа данных TEXT на тип данных VARCHAR(MAX).Обновите сопоставления столбцов, и все должно быть готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...