0

sqlserverce で Fluent NHibernate を使用しています。NHibernate QueryOver を使用して行を取得しようとしました - NHibernate は自動的に結合クエリを生成し、次の例外が発生します。

[SQL: SELECT tag FROM CheckpointToProtectionGroup cp2pg 
      JOIN CheckpointStorageObject cp ON cp.id = cp2pg.checkpoint_id 
      JOIN ProtectionGroupCheckpointStorageObject pg ON pg.id = cp2pg.vpg_id 
      WHERE cp.CheckpointIdentifierIdentifier = 1111  AND 
            pg.ProtectionGroupIdentifierGroupGuid = 
               11111111-1111-1111-1111-111111111111]
---> System.Data.SqlServerCe.SqlCeException: 
     The conversion is not supported. 
     [ Type to convert from (if known) = uniqueidentifier, 
       Type to convert to (if known) = numeric ]

私が見たところ、値 - 11111111-1111-1111-1111-111111111111 を数値に変換しようとしているようですが、この値は Guid フィールドです:

CheckpointToProtectionGroup checkpointToProtectionGroup = Session
            .QueryOver<CheckpointToProtectionGroup>()
            .JoinQueryOver( row => row.ProtectionGroup)
            .Where(row => row.ProtectionGroupIdentifier.GroupGuid == 
                   protectionGroupIdentifier.GroupGuid)
            .SingleOrDefault();

ProtectionGroupIdentifier.GroupGuid は Guid タイプです

4

1 に答える 1

1

GroupGuid値が正しく SQL に変換されていないようです。値を一重引用符で囲む必要があります。

pg.ProtectionGroupIndentifierGroupGuidId = '11111111-1111-1111-1111-111111111111'

SQL Server は左側の値をuniqueidentifier( Guid)から に変換しようとしましnumericた。右側の値はnumeric値 - オペランドの少ない数値減算演算であるためです。

QueryOver 式の一部に値protectionGroupIdentifier.GroupGuidがあります。が本当にプロパティWhereかどうかを確認します。プロパティの場合は、にキャストします。GroupGuidGuidobjectGuid

于 2012-07-08T17:22:21.107 に答える