2012-07-08 42 views
0

我在sqlserverce上使用連貫NHibernate。 使用NHibernate QueryOver我嘗試檢索行 - NHibernate的自動生成氨基酸連接查詢 ,我得到以下異常:在uniqueidentifier上使用連接時出錯 - 將uniqueidentifier轉換爲數字

[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類型

回答

1

看起來你GroupGuid VA的lue未正確轉換爲SQL。它應該有單引號的值。

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

的SQL Server試圖從uniqueidentifierGuid)轉換左手價值numeric,因爲右手值是numeric值 - 幾乎沒有操作數數字減法運算。

您的protectionGroupIdentifier.GroupGuid值在您的QueryOver表達式的Where部分。檢查GroupGuid的確屬於Guid屬性。如果它屬於object屬性,則將其投射到Guid

+0

GroupGuid是Guid Property。但是當我使用JoinQueryOver時,NHibernate不會計算它。當在GroupGuid實體(ProtectionGroupCheckpointStorageObject)上激活QueryOver時,Nhibernate提供正確的SQL和Guid類型的GroupGuid - [Type:Guid(0)] – Haimon 2012-07-08 19:16:05

+0

看起來像NHibernate中的一個錯誤:當在兩個表之間使用JoinQueryOver時,NHibernate無法轉換simple Guid價值uniqueidentifier。需要你的建議。謝謝 – Haimon 2012-07-09 09:08:41

+1

ProtectionGroupIdentifier是另一個實體還是自定義類型或組件?也許問題出在那。 – 2012-07-09 13:32:23

相關問題