2

J'ai récemment mis à jour de NH2.1 à la dernière version de tronc. J'ai également mis à niveau vers le dernier code source de Fluent NHibernate.Fluent NHibernate problème avec nvarchar (max) et SQL Express 2005

Une nouvelle question a été introduite qui se manifeste par l'exception suivante:

System.Data.SqlClient.SqlException: The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 3 ("@p0"): Data type 0xE7 has an invalid data length or metadata length. 

Mes applications couramment produisent le xml hbm suivant:

<property name="FirstName" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
    <column name="FirstName" length="4001" /> 
</property> 

Le problème disparaît si je utilisez 'ntext' pour produire le mappage suivant:

<property name="FirstName" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
    <column name="FirstName" sql-type="NTEXT" /> 
</property> 

Pour être honnête, je ne sais pas qui/quoi est responsable du problème. Mon instinct suggère que c'est NHibernate lui-même, et j'ai été capable d'isoler le problème à ce mappage de propriétés particulier (en réalité, il existe plusieurs chaînes max dans l'entité en cours de mappage).

Pour plus de complexité, le problème ne le fait pas show lors de l'utilisation SQLite, donc je suppose la question peut être enterré dans le dialecte.

(Je veux établir ce qui est l'origine du problème avant que je poste au groupe d'utilisateurs concerné)

+0

Pour isoler le problème, vous devez revenir à l'état précédent dans lequel vous étiez. Ensuite, déplacez lentement cet environnement vers votre état actuel où il ne fonctionne pas et déterminez quelle partie de la mise à jour a introduit le problème. –

Répondre

1

Dans votre application, définissez la longueur de la propriété de chaîne à 4001 ou plus:

Map(x => x.FirstName).Length(4001); 
+0

C'est le mappage exact qui cause le problème. – berko

+0

Afficher la cartographie dans la question la prochaine fois et peut-être vous obtiendrez une meilleure réponse. 4001 (ou plus) travaille pour moi dans SQL 2005 (pas express). –

2

La solution n'est pas vraiment une réponse ... mais fonctionne quand même. Pour résoudre le problème, j'ai changé la longueur dans le mappage à 10000. Maintenant tout fonctionne.

Alors mes correspondances seraient maintenant ressembler à:

Map(x => x.FirstName).Length(10000); 

Go figure.

Il serait formidable que quelqu'un puisse faire la lumière sur cette particularité.

+0

Peut ne pas être la réponse que vous cherchiez, mais cela m'a aidé. +1 – Rap

Questions connexes