Erreur "string ou données binarys serait tronquée" Erreur lors de l'utilisation de Linq to SQL

J'utilise Linq to SQL pour insert des données dans une table, mais get une exception SqlException disant que "datatables string ou binary seraient tronquées". Toutefois, la table se compose uniquement de deux GUID, qui ont une taille exacte; et un nvarchar (max), et mes strings sont inférieures à 20 caractères.

J'ai essayé d'insert des lignes à la main, en utilisant SqlCmd, et cela a bien fonctionné. J'ai également vérifié en utilisant SQL Profiler que rien ne s'écrit dans la trace, indiquant que le problème vient du framework Linq to SQL.

La définition de la table est:

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Results]( [GroupID] [uniqueidentifier] NOT NULL, [ItemID] [uniqueidentifier] NOT NULL, [Name] [nvarchar](max) NOT NULL, PRIMARY KEY (GroupID, ItemID) ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO 

Et le mappage Linq to SQL (à partir du file DBML) est:

 <Table Name="dbo.Results" Member="Results"> <Type Name="Result"> <Column Name="GroupID" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" /> <Column Name="ItemID" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" /> <Column Name="Name" Type="System.Ssortingng" DbType="NVarChar(MAX) NOT NULL" CanBeNull="false" /> </Type> </Table> 

Et dans mon code C #, cela donne l'exception:

 db.Results.InsertOnSubmit(new Result { GroupID = Guid.NewGuid(), ItemID = Guid.NewGuid(), Name = "test" }); db.SubmitChanges(); 

J'ai trouvé ceci qui est une question à propos de nvarchar (max) étant tronqué. Peut-être que la réponse à ce problème permettra de réparer le vôtre. Ce pourrait être un malentendu, mais j'espère que cela aidera. C'est un problème différent mais les deux sont sur le fait que nvarchar (max) est en train de se tronquer alors …

nvarchar (max) toujours tronqué

Je ne comprends toujours pas exactement ce qui se passe ici; ressemble à un mauvais mappage Linq to SQL, ou (peu probable) un bug dans le framework.

Mais pour contourner cela, j'ai remplacé:

 db.Results.InsertOnSubmit(new Result { GroupID = Guid.NewGuid(), ItemID = Guid.NewGuid(), Name = "test" }); db.SubmitChanges(); 

Avec:

 ssortingng cmd = ssortingng.Format("insert into Results values('{0}', '{1}', '{2}')", Guid.NewGuid(), Guid.NewGuid(), "test") db.ExecuteCommand(cmd); 

Et cela fonctionne (pas seulement avec la string de test, mais avec datatables réelles).

Toujours curieux de comprendre ce qui cause l'exception avec le code original …