2010-07-27 2 views
0

nHibernate contrib에서 linq 공급자를 사용하기 시작한 성숙한 nHibernate 프로젝트가 있습니다. nHibernate 2.0을 사용하기 때문에 우리는 트렁크에서 (nHibernate 3.0에 대해) 개발중인 새로운 제공자를 사용할 수 없다.Linq를 사용하여 CompostiteUserTypes 선택 nHibernate (v1)

제한하는 동안 하나의 문제에서 떨어져 우리의 필요를위한 완벽한을 입증 것 - 나는 CompositeUserType에를 선택할 때마다 나는 오류 ''

를 얻을 내가 Linq에 nHibernate 수에 제공 v1을 이러한 유형을 이해할 수있다 확실하지 않다 . 아무도 확실히 압니까? UI와 소스를 시도하고 많은 기쁨을 찾지 못했습니다. 누군가가 나를 도울 수 있고 보여줄 수 있기를 바랍니다.

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

오류 :

나는 다음과 같은 성명을 때

그리고 이제 예를

는 .... 주어진 액티브 유형에 대한 ...

[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; } 
} 

오류가 발생합니다

'속성이 단일 열에 매핑되지 않음 : CurrentPrice'

스택 :아니, 난이 기준을 사용할 수없고 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) 

참고 :

스택 :'CurrentPrice 속성은 하나의 컬럼에 매핑되지 않습니다' Linq 공급자가 훨씬 낫다.

+0

무엇이든지간에 가능한 모든 해결책을 배제 했으므로별로 할 일이 없습니다. –

+0

Diego - 당신은 완전히 그 요점을 놓치고 있습니다. Linq2NHibernate v1을 통해이 작업을 수행하는 방법을 알고 싶습니다. 즉, nHibernate 버전을 업그레이드 할 필요가 없습니다. 우리는 리팩토링 지원을 잃어 버리므로 Hql에서이를 원하지 않습니다. – penderi

답변

0

Ok 우리는 NH v3.0으로 업그레이드하여 해결되었습니다. - 선택할 수 있습니다.

관련 문제