代码之家  ›  专栏  ›  技术社区  ›  Jon Masters

使用INotifyPropertyChanged拦截器保存时出错

  •  0
  • Jon Masters  · 技术社区  · 16 年前

    NHibernate & INotifyPropertyChanged ,存储库将返回实现INotifyPropertyChanged的代理集合,但在某些对象上保存或删除时将抛出错误:

       at NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName)
       at NHibernate.Impl.SessionImpl.GetEntityPersister(String entityName, Object obj)
       at NHibernate.Engine.ForeignKeys.IsTransient(String entityName, Object entity, Nullable`1 assumed, ISessionImplementor session)
       at NHibernate.Event.Default.AbstractSaveEventListener.GetEntityState(Object entity, String entityName, EntityEntry entry, ISessionImplementor source)
       at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event)
       at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)
       at NHibernate.Impl.SessionImpl.FireSaveOrUpdate(SaveOrUpdateEvent event)
       at NHibernate.Impl.SessionImpl.SaveOrUpdate(Object obj)
       at MyCode ...
    

    使用拦截器:

     public ISession GetSession(ISessionFactory factory)
            {
                IInterceptor dataBinding = new DataBindingInterceptor {SessionFactory = factory};
                return factory.OpenSession(dataBinding);
            }
    

    没有

     public ISession GetSession(ISessionFactory factory)
            {
                return factory.OpenSession();
            }
    

    我甚至弄不明白为什么拦截器会破坏保存。

    我对代码所做的唯一更改就是更改了行

    Type Type=Type.GetType(clazz);

    public Type FindType(string typeName)
    {
        foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
        {
            Type foundType = assembly.GetType(typeName);
    
            if (foundType != null)
                return foundType;
        }
        return null;
    }
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   Jon Masters    16 年前

    推荐文章