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

「私のコードがきれいであるかどうか心配していません」しかし、私たちはそれを読むことを期待しています –

+0

あなたが私を助けたいかどうかはあなたの選択です。私のコードは一般的に乱雑になり始め、そのセクションの終わりには、クリーンに見えるようにクリーンアップされ、プリフォームも良くなります。 私は、私のコードを自分の時間を無駄にしてくれる人々を浪費したくないということです。 さらに、私のコードは少し長めになっているかもしれませんが、 "それ"は面倒です。 一日の終わりには、投稿していないものを投稿しても構いません。私は以前よりもはるかに丁寧なコードを読まなければなりませんでした。 –

+0

@OliverBaker:あなたのコードは大丈夫でした。私はちょうどそれを見て、私が必要としていたすべてを理解することができました。 –

答えて

1
VARCHAR(MAX)データ型には非推奨 TEXTデータ型からあなた Additional_OtherInformationMachine_Description_Primary、および Machine_Description_Secondary列を変更

。列のマッピングを更新すると、すべての設定が完了しているはずです。

+0

これはなぜ起こっているのですか?私はそれをどこかで比較していて、それを逃してしまっただけで十分ですか? –

+0

難しいと言います。 L2Sは、値が変更されたかどうかを確認するために何らかの平等チェックを実行したいと思う可能性があります(オプティミスティックな並行処理の一部)。いずれにしても、データベース内のTEXT、NTEXT、またはIMAGEへのすべての参照を、サポートされているデータ型であるVARCHAR(MAX)、NVARCHAR(MAX)、およびVARBINARY(MAX)に置き換える必要があります。 –

+0

お世話になりました!私はまだSQLの型がかなり新しく、これらのフィールドを比較していなかったので、それは問題ではないと思っていました。ああ、ありがとう! –

関連する問題