c# - NHibernate 在 NUnit 和 Console 下工作,但在 IIS 下不工作 [抛出 PropertyAccessException]

标签 c# nhibernate fluent-nhibernate

我有一个 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 上下文(特别是 sitecore 项目)中引用相同的 .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 中运行?

最佳答案

TI.Security.Core.Impl.Management.Provisioning.DAL.PersistentGenericSet<T>是一个奇怪的类。这个是定制开发的吗?如果是这样,它可能不会实现 Iesi.Collections.Generic.ISet<T> 。如果它确实实现了它,则可能是加载了多个 Iesi 程序集的问题。

我从未听说过 sitecore,所以也许它在后台做了一些奇怪的事情。

关于c# - NHibernate 在 NUnit 和 Console 下工作,但在 IIS 下不工作 [抛出 PropertyAccessException],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11730988/

相关文章:

c# - 如何在 WPF Core 应用程序中获取 "Add a new data source"?

c# - 如何将 excel ListObject 添加到 C# 中的给定工作表?

c# - 使用 OpenXML 读取列中的 Excel 工作表数据

c# 将 LINQ var 结果转换为实际类型

c# - Entity Framework 的子查询

c# - 使用虚拟属性支持 NHibernate 代理; ReSharper 警告构造函数中的虚拟成员调用

c# - 如何在 Fluent NHibernate 中从数据库 char 数据类型中修剪字符串属性数据类型

sql - 延迟加载真的很糟糕吗?

c# - 使用 NHibernate 编写单元测试的最佳实践

nhibernate - 流畅的 NHibernate : How to create one-to-many bidirectional mapping?