使用Linq选择CompositeUserTypes到nHibernate(v1)

使用Linq选择CompositeUserTypes到nHibernate(v1),nhibernate,linq-to-nhibernate,compositeusertype,Nhibernate,Linq To Nhibernate,Compositeusertype,我们有一个成熟的nHibernate项目,已经开始在nHibernate contrib中使用linq提供程序。由于我们使用的是nHibernate 2.0,我们不能在主干中使用正在开发的新提供者(与nHibernate 3.0相比) 虽然有限,但事实证明,除了一个问题外,它非常适合我们的需要-每当我选择一个CompositeUserType时,我都会收到一个错误“ 我不确定Linq到nHibernate提供程序v1是否能够理解这些类型。有人确切知道吗?我正在尝试源代码,但没有找到多少乐趣。我希

我们有一个成熟的nHibernate项目,已经开始在nHibernate contrib中使用linq提供程序。由于我们使用的是nHibernate 2.0,我们不能在主干中使用正在开发的新提供者(与nHibernate 3.0相比)

虽然有限,但事实证明,除了一个问题外,它非常适合我们的需要-每当我选择一个CompositeUserType时,我都会收到一个错误“

我不确定Linq到nHibernate提供程序v1是否能够理解这些类型。有人确切知道吗?我正在尝试源代码,但没有找到多少乐趣。我希望有人能帮我,告诉我怎么做

现在举个例子。。。。对于给定的ActiveRecord类型

[ActiveRecord]
public class Product : IHoldPrice
{
       [PrimaryKey(PrimaryKeyType.Guid)]
       public virtual Guid Key { get; set; }

       [Property(NotNull = true, Length = 250)]
       public virtual string Name { get; set;}

       [CompositeUserType(typeof (PriceUserType), new[] {"Price_Value", "Price_DateChanged"})]
       public virtual IPrice CurrentPrice { get; set; }
}
当我尝试以下语句时,我得到一个错误:

(from p in Session.Linq<Product>()
              .Where(p => p.Key == productKey)
              .Select(p => new
                  {
                      p.Key,
                      p.CurrentPrice
                  }))
              .FirstOrDefault();

注意-不,我不能使用标准,也没有Hql现在不行,我知道新的Linq提供程序要好得多。

好的,我们升级到NH v3.0,它已经解决了-可以选择。

因为你已经排除了所有可能的解决方案,无论是什么原因,都没有什么可做的。迭戈-你完全没有抓住重点。我想知道如何通过Linq2NHibernate v1实现,因为这意味着我不需要升级nHibernate版本。我们不希望它出现在Hql中,因为我们失去了重构支持。
NHibernate.QueryException: property does not map to a single column: CurrentPrice
   at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetColumn(ICriteria criteria, String propertyName)
   at NHibernate.Criterion.PropertyProjection.ToSqlString(ICriteria criteria, Int32 loc, ICriteriaQuery criteriaQuery, IDictionary`2 enabledFilters)
   at NHibernate.Criterion.ProjectionList.ToSqlString(ICriteria criteria, Int32 loc, ICriteriaQuery criteriaQuery, IDictionary`2 enabledFilters)
   at NHibernate.Loader.Criteria.CriteriaQueryTranslator.GetSelect(IDictionary`2 enabledFilters)
   at NHibernate.Loader.Criteria.CriteriaJoinWalker..ctor(IOuterJoinLoadable persister, CriteriaQueryTranslator translator, ISessionFactoryImplementor factory, ICriteria criteria, String rootEntityName, IDictionary`2 enabledFilters)
   at NHibernate.Loader.Criteria.CriteriaLoader..ctor(IOuterJoinLoadable persister, ISessionFactoryImplementor factory, CriteriaImpl rootCriteria, String rootEntityName, IDictionary`2 enabledFilters)
   at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results)
   at NHibernate.Impl.CriteriaImpl.List(IList results)
   at NHibernate.Impl.CriteriaImpl.List[T]()
   at NHibernate.Linq.Visitors.ImmediateResultsVisitor`1.GetElementList(MethodCallExpression call, Int32 count)
   at NHibernate.Linq.Visitors.ImmediateResultsVisitor`1.HandleFirstOrDefaultCall(MethodCallExpression call)
   at NHibernate.Linq.Visitors.ImmediateResultsVisitor`1.VisitMethodCall(MethodCallExpression call)
   at NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression exp)
   at NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit(Expression exp)
   at NHibernate.Linq.Visitors.ImmediateResultsVisitor`1.GetResults(MethodCallExpression expr)
   at NHibernate.Linq.Visitors.RootVisitor.HandleImmediateResultsCall(MethodCallExpression call)
   at NHibernate.Linq.Visitors.RootVisitor.VisitMethodCall(MethodCallExpression expr)
   at NHibernate.Linq.Visitors.ExpressionVisitor.Visit(Expression exp)
   at NHibernate.Linq.Visitors.NHibernateExpressionVisitor.Visit(Expression exp)
   at NHibernate.Linq.Visitors.NHibernateQueryTranslator.Translate(Expression expression, QueryOptions queryOptions)
   at NHibernate.Linq.NHibernateQueryProvider.TranslateExpression(Expression expression)
   at NHibernate.Linq.NHibernateQueryProvider.Execute(Expression expression)
   at NHibernate.Linq.QueryProvider.System.Linq.IQueryProvider.Execute[T](Expression expression)
   at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)