0
使用NHibernate & INotifyPropertyChanged描述的方法保存錯誤,存儲庫將返回執行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 ...
我想,如果我創建沒有攔截器的會話SaveOrUpdate工作正常,但與攔截器它錯誤。
與攔截器:
public ISession GetSession(ISessionFactory factory)
{
IInterceptor dataBinding = new DataBindingInterceptor {SessionFactory = factory};
return factory.OpenSession(dataBinding);
}
沒有
public ISession GetSession(ISessionFactory factory)
{
return factory.OpenSession();
}
我在爲如何去甚至弄清楚爲什麼攔截會破壞保存的損失。
我的代碼所做的唯一變化是改變線
類型類型= Type.GetType(clazz所);
到
Type type = FindType(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;
}