问题在于:简而言之,我使用了comb.guid身份策略,我需要在保存的标记之后创建的所有行。
这是我想要获得的虚拟代码示例:
返回会话.Linq .Where(p => p.Id.CompareTo(lastSyncedEntityIdentity) == 1) .ToList();
这引发了一个异常,说没有实现CompareTo ......
System.NotImplementedException occurred
Message=The method CompareTo is not implemented.
Source=NHibernate.Linq
StackTrace:
at NHibernate.Linq.Visitors.RootVisitor.VisitMethodCall(MethodCallExpression expr) in e:\horn\.horn\orm\nhcontrib\nhibernate.linq\Working-2.1\src\NHibernate.Linq\Visitors\RootVisitor.cs:line 97
InnerException:
正如你从堆栈中看到的那样,我在没有任何帮助的情况下尝试了hornget trunk的2.1版本
为了绕过这个限制我必须做些什么提示/线索我认为这会影响大多数人使用comb.guid策略?
谢谢, 尼古拉
答案 0 :(得分:0)
这里的问题是CompareTo方法无法转换为SQL查询。
请记住,所有NHibernate.Linq正在做的是从lambda表达式中定义的谓词构建SQL Select语句,lambda中使用的任何内容都必须可以转换为类似的SQL语句。
所以
session.Linq.Where(p => p.Id == 10299);
可以翻译为
SELECT * FROM Table WHERE Table.Id = 10299
然而,CompareTo没有SQL命令,因为这是一个.net方法。