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 공급자가 훨씬 낫다.
무엇이든지간에 가능한 모든 해결책을 배제 했으므로별로 할 일이 없습니다. –
Diego - 당신은 완전히 그 요점을 놓치고 있습니다. Linq2NHibernate v1을 통해이 작업을 수행하는 방법을 알고 싶습니다. 즉, nHibernate 버전을 업그레이드 할 필요가 없습니다. 우리는 리팩토링 지원을 잃어 버리므로 Hql에서이를 원하지 않습니다. – penderi