2011-06-23 20 views
2

NHibernate 3.1とFluentNHibernate 1.2の例外Association references unmapped class: System.Guidが引き続き発生します。関連付けられていない参照クラス:System.Guid

どのようにこれが可能かわかりません。 Guidのマッピングは内部的に処理されていませんか?

Fluent NHibernate 1.0のバグに関するいくつかの言及がありましたが、修正された場所ではなくtrunkを使う人がいましたが、1.0ではなく1.2になっているので、おそらくこの問題は解決されています。

編集:ここではいくつかの追加情報です - 私は流暢AutoMapperからエクスポートしてきた例のHBMは、以下の

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false"> 
    <class xmlns="urn:nhibernate-mapping-2.2" lazy="false" name="Treadmarks.Bus.Frontend.Model.PassType, Frontend, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`PassType`"> 
    <id name="PassTypeId" type="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="PassTypeId" /> 
     <generator class="guid.comb" /> 
    </id> 
    <property name="Name" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="Name" /> 
    </property> 

    <property name="UsageInterval" type="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <column name="UsageInterval" /> 
    </property> 
    </class> 
</hibernate-mapping> 

のように見えるとはHBM言っ生成FNHコードを以下に示します。

private class AutomappingConfiguration : DefaultAutomappingConfiguration 
    { 
     public override bool ShouldMap(Type type) 
     { 
      return type.Namespace.StartsWith("Treadmarks.Bus.Frontend.Model"); 
     } 

     public override bool IsId(FluentNHibernate.Member member) 
     { 
      return member.Name == member.DeclaringType.Name + "Id"; 
     } 
    } 

    public static Configuration BuildConfiguration() 
    { 
     return Fluently.Configure() 
      .Database(SQLiteConfiguration.Standard.ConnectionString("Data Source=Treadmarks.db; Compress=true")) 
      .Mappings(
       m => m.AutoMappings.Add(AutoMap.Assembly(Assembly.GetExecutingAssembly(), new AutomappingConfiguration()) 
              .Conventions.Add(
               DefaultLazy.Never(), 
               LazyLoad.Never()) 
         ).ExportTo("mappings.hbm")) 
      .BuildConfiguration(); 
    } 
は、
+0

私たちは問題なくGUIDマッピングを使用しています。例外をスローするコード行を見ることは可能ですか? –

+0

標準のBuildSessionFactory呼び出しです。 –

+0

'Guid'が' struct'であるという面白いエラーメッセージは...フレームワークのバグのようです。別のバージョンを使用しようとしましたか? (ちょうどこの問題をテストするために、私は意味する) –

答えて

2

List<int>などのようにFNHがList<Guid>のマッピングを正しく生成できないことが判明しました。これをFNHチームに報告します。

+0

これが修正されたかどうかは分かりますか? – Marco

-1

あなたはIDマッピングのためのタイプをspecificyする必要はありません、またはあなたが「のGUID」のようなNHibernateのタイプを指定したかどうかを確認http://nhforge.org/doc/nh/en/index.html#mapping-types

+0

だから、これはFNHバグですか? –

0

私はTHIを得ました昨日、新しいプロジェクトでFluentを配線するときのエラーメッセージ。現在(Guidキーを使用して)動作していますが、エラーを再現できません。

メッセージ自体は、System.Guidのマッピング設定を探していることを示しています。私の推測では、外部キーロジックをトリガしているプロパティ名が表示されており、そのプロパティ名はGuidに関連付けられているということです。

新しい外部キー規則を追加して、その既定のロジックでこれらの前提をなくすことはできますか?

関連する問題