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();
}
は、
私たちは問題なくGUIDマッピングを使用しています。例外をスローするコード行を見ることは可能ですか? –
標準のBuildSessionFactory呼び出しです。 –
'Guid'が' struct'であるという面白いエラーメッセージは...フレームワークのバグのようです。別のバージョンを使用しようとしましたか? (ちょうどこの問題をテストするために、私は意味する) –