4

我在使用无状态会话进行更新时遇到问题,我想知道是否有人见过这样的事情。(NHibernate 3.1)。

我基本上在做以下事情:

SomeEntity e = statelessSession.Get<SomeEntity>(id); 
e.SomeProperty = "a new value"; 
statelessSession.Update(e); 

我收到以下错误:

NHibernate.MappingException: No persister for: 
  Castle.Proxies.SomeEntityProxy 
  at NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String 
  entityName) 
  at NHibernate.Impl.StatelessSessionImpl.GetEntityPersister(String 
  entityName, Object obj) 
  at NHibernate.Impl.StatelessSessionImpl.Update(String entityName, 
  Object entity) 
  at NHibernate.Impl.StatelessSessionImpl.Update(Object entity) 

映射 -

class SomeEntityMap : ClassMap<SomeEntity>
{
    public SomeEntityMap()
    {           
        Table("Some_Entity");            
        Id(x => x.ID).Column("ID");         
        Map(x => x.Name).Column("NAME");
    }

我已经进入调试器,可以看到 statelessSession.Get(id) 正在返回一个代理。这个对吗?

有人知道问题是什么吗?请分享您的观点和建议。

4

1 回答 1

1

正如您在问题中概述的那样,我做了一个测试项目,但无法重现该问题。我能够重现该错误的唯一情况是:

  1. 初始化会话工厂时未指定映射的位置,即您丢失了

    Fluently.Configure()
      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<SomeEntity>());
    
  2. 的属性之一SomeEntity已标记为lazy="no-proxy"。更多信息可以在这里找到。

于 2013-03-09T18:58:07.417 回答