Nhibernate 对uniqueidentifier使用联接时出错-将uniqueidentifier转换为数字

Nhibernate 对uniqueidentifier使用联接时出错-将uniqueidentifier转换为数字,nhibernate,join,sql-server-ce,fluent,Nhibernate,Join,Sql Server Ce,Fluent,我正在sqlserverce上使用Fluent NHibernate。 使用NHibernate QueryOver我尝试检索行-NHibernate自动生成连接查询 我得到以下例外情况: [SQL: SELECT tag FROM CheckpointToProtectionGroup cp2pg JOIN CheckpointStorageObject cp ON cp.id = cp2pg.checkpoint_id JOIN ProtectionGroupCh

我正在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-1111-111111111转换为数字,但该值是一个Guid字段:

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

ProtectionGroupIdentifier.GroupGuid是Guid类型

看起来您的
GroupGuid
值未正确转换为SQL。它应该在值周围有单引号

pg.ProtectionGroupIndentifierGroupGuidId = '11111111-1111-1111-1111-111111111111'
SQL Server尝试将左侧值从
uniqueidentifier
Guid
)转换为
numeric
,因为右侧值是
numeric
value-操作数很少的数值减法运算


查询表达式的
Where
部分中有
protectionGroupIdentifier.GroupGuid
值。检查
GroupGuid
是否确实是
Guid
属性。如果它是
对象
属性,请将其强制转换为
Guid

GroupGuid是Guid属性。但是当我使用JoinQueryOver时,NHibernate没有想到这一点。当在GroupGuid实体(ProtectionGroupCheckpointStorageObject)上激活QueryOver时,Nhibernate为Guid-[type:Guid(0)]类型的GroupGuid提供正确的SQL,这看起来像是Nhibernate中的错误:在两个表之间使用JoinQueryOver时,Nhibernate无法将简单Guid值转换为uniqueidentifier。我需要你的建议。ThanksIs ProtectionGroupIdentifier其他实体、自定义类型或组件?也许问题出在这一点上。ProtectionGroupIdentifier是一个组件。嗯,在何处将两侧转换为字符串如何?或者只使用一个,并使用等于而不是==。不太确定它是否会起作用。如果您有一个常规Guid属性而不是组件,那么这可能不会是一个问题。。。我有点不知所措,所以什么都可以。