用于修改生成的SQL语句的自定义NHibernate实体持久器

用于修改生成的SQL语句的自定义NHibernate实体持久器,sql,nhibernate,interceptor,Sql,Nhibernate,Interceptor,我需要的是从DB视图填充实体,使其不可插入,并将所有实体更新到可更新的DB表 将实体映射到表并从视图中编写自定义加载SQL不是一个选项,因为在某些情况下,例如,在加入该实体时,NHibernate仍会尝试从表名中进行选择。 将实体映射到视图和编写自定义数据修改查询不是一个选项,因为由于上次插入的标识值选择部分,我无法编写跨数据库sql insert语句。 目前我唯一想到的是动态修改生成的SQL语句。我设法用自定义拦截器实现了这一点,但我认为这不是一个好主意,因为我拦截了每个查询,即使是对其他实体

我需要的是从DB视图填充实体,使其不可插入,并将所有实体更新到可更新的DB表

将实体映射到表并从视图中编写自定义加载SQL不是一个选项,因为在某些情况下,例如,在加入该实体时,NHibernate仍会尝试从表名中进行选择。 将实体映射到视图和编写自定义数据修改查询不是一个选项,因为由于上次插入的标识值选择部分,我无法编写跨数据库sql insert语句。 目前我唯一想到的是动态修改生成的SQL语句。我设法用自定义拦截器实现了这一点,但我认为这不是一个好主意,因为我拦截了每个查询,即使是对其他实体。但是,我认为应该可以使用定制的IEntityPersister更改只需要的查询。我基于SingleTableEntityPersister创建了一个,在中指定了它,但NHibernate甚至不想实例化它


有没有为NHibernate编写自定义实体持久化器的示例?

您可以用两个映射来代替,并且总是通过一个保存,通过另一个选择?这将需要执行不必要的select语句来加载可更新的实体,即使已加载可选择的实体。您是否找到了解决方案,或者您是否坚持使用自定义拦截器,因为我有完全相同的问题?@Matt不幸,没有解决方案。你能用两个映射来代替吗,并且总是通过一个保存,通过另一个选择?这将需要执行不必要的select语句来加载可更新的实体,即使已加载可选择的实体。您是否找到了解决方案,或者您是否坚持使用自定义拦截器,因为我有完全相同的问题?@Matt不幸,没有解决办法。