2011-06-29 11 views
6

ile bir bayt özelliği nhibernate 3.1.0.4000 ile herhangi bir problem var mı nerede sorgu bir bayt özelliği:Sorgu nhibernate neden geçersiz döküm hatası

byte code = 2; 
Group g = Repository<Group>.FindOne(p => p.Code == code); 

İstisna metni:

Cause 'Specified cast is not valid.' 

[InvalidCastException: Specified cast is not valid.] 
    NHibernate.Type.ByteType.Set(IDbCommand cmd, Object value, Int32 index) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Type\ByteType.cs:44 
    NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd, Object value, Int32 index) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Type\NullableType.cs:180 
... 

[GenericADOException: could not execute query 
[ select group0_.LabourLawGroupId as LabourLa1_235_, group0_.Code as Code235_ from personnel.LabourLawGroup group0_ where group0_.Code=? ] 
    Name:p1 - Value:4 
[SQL: select group0_.LabourLawGroupId as LabourLa1_235_, group0_.Code as Code235_ from personnel.LabourLawGroup group0_ where group0_.Code=?]] 
    NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:1703 
    NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:1601 
    NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:1591 
    NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Hql\Ast\ANTLR\Loader\QueryLoader.cs:300 
    NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Hql\Ast\ANTLR\QueryTranslatorImpl.cs:108 
    NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\Query\HQLQueryPlan.cs:78 
    NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\SessionImpl.cs:645 
    NHibernate.Impl.AbstractSessionImpl.List(IQueryExpression queryExpression, QueryParameters parameters) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\AbstractSessionImpl.cs:92 
    NHibernate.Impl.ExpressionQueryImpl.List() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\ExpressionQueryImpl.cs:60 
    NHibernate.Linq.NhQueryProvider.ExecuteQuery(NhLinqExpression nhLinqExpression, IQuery query, NhLinqExpression nhQuery) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\NhQueryProvider.cs:79 
    NHibernate.Linq.NhQueryProvider.Execute(Expression expression) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Linq\NhQueryProvider.cs:103 
    System.Linq.Queryable.SingleOrDefault(IQueryable`1 source) +265 
    Azarakhsh.Framework.Repository.NHibernateRepository`1.FindOne(Expression`1 expression) +223 
    Azarakhsh.Framework.Repository.Repository`1.FindOne(Expression`1 expression) +100 
+1

Lütfen istisna ayrıntısını/yığın izlemesini gönderin. – Jay

cevap

6

alıyorum Bu durumda

var details = 
    (from d in repository.AllEntities 
     where (d.OtherTable.Field == someCriteria && d.LineIndex == 1) 
     select d).ToList(); 

,: böyle bir Linq2Nhibernate sorgu kullanarak NHibernate aynı sürümü ile aynı hata, .NET Byte (null değil) olarak eşlenmiştir. Benim yığın izlemesi üst şuna benzer:

NHibernate.Type.ByteType.Set(IDbCommand cmd, Object value, Int32 index) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Type\ByteType.cs: line 44 
NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd, Object value, Int32 index) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Type\NullableType.cs: line 180 
NHibernate.Type.NullableType.NullSafeSet(IDbCommand st, Object value, Int32 index, ISessionImplementor session) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Type\NullableType.cs: line 139 
NHibernate.Engine.QueryParameters.BindParameters(IDbCommand command, Int32 start, ISessionImplementor session) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Engine\QueryParameters.cs: line 630 
... 

kaynağında baktığımızda, Set yöntem aşağıdaki gibidir:

public override void Set(IDbCommand cmd, object value, int index) 
{ 
    ((IDataParameter) cmd.Parameters[index]).Value = (byte) value; 
} 

Bu yüzden bir byte bir nesneyi yayın yapmaya çalıştığınız geçersiz oluyor oyuncular. 1'u byte'a çevirdiğimde, yine de aynı hatayı alıyorum. Ayrıca bir const byte kullanırsam olur. Bu nedenle, byte'u alarak ve onunla garip bir şeyler yapmakta olan yığının üzerinde bir şey olduğunu düşünüyorum.

Alan null olmadığında NullSafeSet yapması özellikle ilginçtir. Bir deneme olarak, LineIndex mülkümü int olarak değiştirdim ve geçersiz yayın istisnası almadım. Bu NHibernate'de bir hata gibi görünüyor. Bunu NHibernate hata izleyicisine yapıştıracağım.

this similar bug NH-2485 olmayan bir konu olarak kapatıldı

Not olduğunu Düzen.

Diğer benzer/örtüşen hata: byte üzerinde

  • NH-2789 LINQ sorgusu?

    • NH-2812 boş olmayan bir bayt özellikte bir Linq sorgusu gerçekleştirme ınvalidcastexception

    Düzenleme atar: basit özellik MSSQL 2005 (Tinyint)

Ben bu hatayı ibraz üzerinde başarısız

Sürüm 3.3.1 ve üstü bu sorunu çözmektedir.

2

Hemen yerine byte

1

ait short kullanmak NHibernate 3.2.x bugün tam bu sorunu vardı Scott Whitlock tarafından listelenen hatalar fixed in 3.3.x olarak işaretlendi ve NHibernate'i yükseltmenin bu sorunu çözdüğünü doğrulayabilirim.