2011-05-12 8 views
0

詳細を提供しないマッピングの例外のトラブルシューティング方法を支援したいと思います。 Er、OK - クラスやプロパティだけでは十分な詳細はありません。Fluent-NHibernateマッピングが「Bad identifier type:System.Guid」をスローします

まず、NH3.1とFNH 1.2にアップグレードしました。私はNHibernate(3.1.0.4000)用のSQLiteデータベースを構築するために使用するクラスを持っています。私は問題であるFluent-nhibernate(1.2.0.712)マッピングを分離しようとするのに問題があります。

エラーは次のとおりです。

System.InvalidCastException: Unable to cast object of type 'NHibernate.Type.SerializableType' to type 'NHibernate.Type.IIdentifierType'. at NHibernate.Engine.UnsavedValueFactory.GetUnsavedIdentifierValue(String unsavedValue, IGetter identifierGetter, IType identifierType, ConstructorInfo constructor) NHibernate.MappingException: Bad identifier type: System.Guid at NHibernate.Engine.UnsavedValueFactory.GetUnsavedIdentifierValue(String unsavedValue, IGetter identifierGetter, IType identifierType, ConstructorInfo constructor) at NHibernate.Tuple.PropertyFactory.BuildIdentifierProperty(PersistentClass mappedEntity, IIdentifierGenerator generator) at NHibernate.Tuple.Entity.EntityMetamodel..ctor(PersistentClass persistentClass, ISessionFactoryImplementor sessionFactory) at NHibernate.Persister.Entity.AbstractEntityPersister..ctor(PersistentClass persistentClass, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory) at NHibernate.Persister.Entity.SingleTableEntityPersister..ctor(PersistentClass persistentClass, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping mapping) at NHibernate.Persister.PersisterFactory.CreateClassPersister(PersistentClass model, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping cfg) at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners) at NHibernate.Cfg.Configuration.BuildSessionFactory() at MYPROJ.DatabaseConfigurer.OpenSession(DbEnum database) in DatabaseConfigurer.cs: line 37 at MYPROJ.user_specification.<.ctor>b__5() in UserSpecs.cs: line 670

のGuid?どのようなGuid?私はマッピングのどこにでも識別子としてGUIDを持っていません。私はプロパティとしてクラス内に1つのGUIDを持っています - 私はサービスによって処理するためにレコードをバッチするためにGUIDを使用します。識別子ではありません。

私は流暢-NHibernateはを使用して、メモリ内SQLiteConfigurationをインスタンス化し、このライン上のエラー(1.2.0.712)を取得:

var sessionFactory = configuration.BuildSessionFactory(); 

私は、ファイルにログを記録するようにlog4netの基本的な設定をオンにすることができますが、エラーが見つからない。ここではそのログの末尾である:

2011-05-12 15:29:04,152 [1] ?.lambda_method(:0) - processing filters (second pass) 
2011-05-12 15:29:04,199 [1] ?.lambda_method(:0) - Using dialect: NHibernate.Dialect.SQLiteDialect 
2011-05-12 15:29:04,277 [1] ?.lambda_method(:0) - Using dialect defined converter 
2011-05-12 15:29:04,277 [1] ?.lambda_method(:0) - Generate SQL with comments: disabled 
2011-05-12 15:29:04,277 [1] ?.lambda_method(:0) - Initializing connection provider: NHibernate.Connection.DriverConnectionProvider 
2011-05-12 15:29:04,277 [1] ?.lambda_method(:0) - Configuring ConnectionProvider 
2011-05-12 15:29:04,277 [1] ?.lambda_method(:0) - Transaction factory: NHibernate.Transaction.AdoNetWithDistributedTransactionFactory 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - Optimize cache for minimal puts: False 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - Connection release mode: on_close 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - Default batch fetch size: 1 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - echoing all SQL to stdout 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - Statistics: disabled 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - Deleted entity synthetic identifier rollback: disabled 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - Query translator: NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - Query language substitutions: {'true'='1', 'false'='0'} 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - cache provider: NHibernate.Cache.NoCacheProvider, NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - Wrap result sets: disabled 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - Batcher factory: NHibernate.AdoNet.NonBatchingBatcherFactory, NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - Default entity-mode: Poco 
2011-05-12 15:29:04,293 [1] ?.lambda_method(:0) - Named query checking : enabled 
2011-05-12 15:29:04,324 [1] ?.lambda_method(:0) - building session factory 
2011-05-12 15:29:04,324 [1] ?.lambda_method(:0) - Session factory constructed with filter configurations : {} 
2011-05-12 15:29:04,324 [1] ?.lambda_method(:0) - instantiating session factory with properties: {'connection.provider'='NHibernate.Connection.DriverConnectionProvider', 'proxyfactory.factory_class'='NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle', 'connection.driver_class'='NHibernate.Driver.SQLite20Driver, NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4', 'dialect'='NHibernate.Dialect.SQLiteDialect, NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4', 'hibernate.dialect'='NHibernate.Dialect.SQLiteDialect, NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4', 'query.substitutions'='true=1;false=0', 'connection.release_mode'='on_close', 'show_sql'='true', 'connection.connection_string'='Data Source=:memory:;Version=3;New=True;'} 
2011-05-12 15:29:04,324 [1] ?.lambda_method(:0) - Obtaining IDbConnection from Driver 
2011-05-12 15:29:04,324 [1] ?.lambda_method(:0) - Closing connection 

log4netのは、任意の洞察力を提供していませんでしたが、私は多分、クラスやプロパティを明らかにするために、この例外をデバッグすることができ、別の方法は何ですか?

おかげ

EDIT 私は私の主キーとエヘンを設定するためIIdConventionを使用私のズボンが燃えている:私はerrorIDのためのGUIDを持ってELMAHを、使用しています。 ElmahのGuidに対する整数の正しいUnsavedValueセットについて、自分の大会で受信したインスタンスをテストできるかどうかを確認します。私は明日これをテストし、答えを投稿します。

答えて

0

私はちょうどエルマをテストマッピングから削除しました。

EngineUnsavedValueFactory.GetUnsavedIdentifierValueは、0がGUIDの有効なデフォルト値ではないため、エラーをスローしています。

私は、以前にデフォルト値の0ですべてのIDを設定した流暢NHibernateのID規則を持っていたが、これは3.1.0.4000 2. *からの変更で破りました。

関連する問題