使用Linq选择CompositeUserTypes到nHibernate(v1)
我们有一个成熟的nHibernate项目,已经开始在nHibernate contrib中使用linq提供程序。由于我们使用的是nHibernate 2.0,我们不能在主干中使用正在开发的新提供者(与nHibernate 3.0相比) 虽然有限,但事实证明,除了一个问题外,它非常适合我们的需要-每当我选择一个CompositeUserType时,我都会收到一个错误“ 我不确定Linq到nHibernate提供程序v1是否能够理解这些类型。有人确切知道吗?我正在尝试源代码,但没有找到多少乐趣。我希望有人能帮我,告诉我怎么做 现在举个例子。。。。对于给定的ActiveRecord类型使用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是否能够理解这些类型。有人确切知道吗?我正在尝试源代码,但没有找到多少乐趣。我希
[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)