2

次のようなオブジェクトを含む API があります。

public class NOrgUnit {
    public virtual NOrgUnit Parent { get; set;}
    public virtual ISet<NOrgUnit> children { get; set; } // an Iesi 1.0.1 ISet
    public virtual Int64 Id { get; protected set; }
    public virtual string Name { get; set; }

    // etc.
}

オブジェクトには次のマップがあります。

public class NOrgUnitMap : ClassMap<NOrgUnit>
{
    public NOrgUnitMap()
    {
        Id(x => x.Id);

        Map(x => x.Name);

        References(x => x.Parent).Nullable();
        HasMany(x => x.children).AsSet();
    }
}

API をビルドしてコンソール アプリケーションで参照すると、すべてが完全に機能します。

asp.net コンテキスト (具体的にはサイトコア プロジェクト) で同じ .dll を参照すると、NHibernate 例外が発生します。

Org Service encountered unexpected exception [NHibernate.PropertyAccessException: Invalid Cast (check your mapping for property type mismatches); setter of TI.Organization.Core.Impl.DAL.Persistence.Entities.Hierarchy.NOrgUnit ---> System.InvalidCastException: Unable to cast object of type 'TI.Security.Core.Impl.Management.Provisioning.DAL.PersistentGenericSet`1[TI.Organization.Core.Impl.DAL.Persistence.Entities.Hierarchy.NOrgUnit]' to type 'Iesi.Collections.Generic.ISet`1[TI.Organization.Core.Impl.DAL.Persistence.Entities.Hierarchy.NOrgUnit]'.
   at (Object , Object[] , SetterCallback )
   at NHibernate.Bytecode.Lightweight.AccessOptimizer.SetPropertyValues(Object target, Object[] values)
   at NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValuesWithOptimizer(Object entity, Object[] values)
   --- End of inner exception stack trace ---
   at NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValuesWithOptimizer(Object entity, Object[] values)
   at NHibernate.Tuple.Entity.PocoEntityTuplizer.SetPropertyValues(Object entity, Object[] values)
   at NHibernate.Persister.Entity.AbstractEntityPersister.SetPropertyValues(Object obj, Object[] values, EntityMode entityMode)
   at NHibernate.Engine.TwoPhaseLoad.InitializeEntity(Object entity, Boolean readOnly, ISessionImplementor session, PreLoadEvent preLoadEvent, PostLoadEvent postLoadEvent)
   at NHibernate.Loader.Loader.InitializeEntitiesAndCollections(IList hydratedObjects, Object resultSetId, ISessionImplementor session, Boolean readOnly)
   at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)

これは数日間私を困惑させています。アプリケーションが IIS ではなくコンソールで動作するのはなぜですか?

4

1 に答える 1

3

TI.Security.Core.Impl.Management.Provisioning.DAL.PersistentGenericSet<T>変なクラスです。これはカスタム開発されたものですか?もしそうなら、それはおそらく実装されていませんIesi.Collections.Generic.ISet<T>。実装している場合は、複数の Iesi アセンブリが読み込まれていることが問題である可能性があります。

サイトコアについて聞いたことがないので、バックグラウンドで奇妙なことをしているのかもしれません。

于 2012-07-31T09:31:14.010 に答える