0

Fluent NHIbernate を使用してこの投稿をフォローしようとしています: http://blogs.planetcloud.co.uk/mygreatdiscovery/post/Localizing-entities-with-NHibernate.aspx

私のテストでは、次のエラーが生成されます。

  ----> NHibernate.MappingException : An association from the table TranslatedText refers to an unmapped class: .Domain.Localisation.ILocalizedEntity

NH にインターフェースを尊重させる方法はありますか?

.IncludeBase<ILocalizedEntity>()私の自動モデルに追加しても何も起こりませんでした...(予想どおり、抽象的な権利ではなくインターフェースですか?)

マッピング: (質問)

mapping.HasMany(m => m.TranslatedTexts)
                .AsSet()
                .Inverse().Cascade.SaveUpdate()
                .KeyColumn("EntityId")
                .ForeignKeyConstraintName("none")
                .Where("EntityClass = 'Domain.Question'");

TranslatedText (あり)public virtual ILocalizedEntity Entity { get; set; }

mapping.ReferencesAny(tt => tt.Entity)
                .IdentityType<Guid>()
                .EntityIdentifierColumn("EntityId")
                .EntityTypeColumn("EntityType");

インターフェース:

    public interface ILocalizedEntity
    {
        ICollection<TranslatedText> TranslatedTexts { get; set; }
    }

FNH テスト スイートでも同じことがわかりました。私は AutoMapping を使用しているという事実と関係があると感じていますが、まだわかりません...

編集 が確認されました - 上記と同じマッピングで、自動マッピングの代わりに標準の ClassMap を使用すると、期待どおりに動作します。

4

1 に答える 1

0

関連するクラスを自動マッピングから削除し、ClassMaps を使用して手動でロールするという「回避策」を見つけました。

sessionFactory = Fluently.Configure()
 .Database(sqlConfig)
.Mappings(m => m.AutoMappings.Add(new MyAutoPersistenceModel().GetModel()))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<QuestionMap>())
.BuildSessionFactory();

MyAutoPersistenceModel では:

public override bool ShouldMap(System.Type type)
{
            var interfaces = type.GetInterfaces();
            return type != typeof(TranslatedText) && 
                !interfaces.Any(x => x.GetType() == typeof(ILocalisedEntity)) &&
                interfaces.Any(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEntityWithTypedId<>));
}
于 2012-12-31T17:29:05.733 に答える