使用Fluent.NHibernate,如何根据Select语句进行插入

时间:2016-03-24 01:20:12

标签: c# sql-server fluent-nhibernate iqueryable

我有一个相当复杂的逻辑,为我生成IQueryable,用于使用Fluent.NHibernate从我的数据库返回数据。

但是,我需要能够将此查询的结果存储回数据库中(实际上只是主键,但这是一个副作用)

如何生成基于IQueryable的插入语句我已经得到了SQL,就像下面生成的例子一样:

INSERT INTO MySavedResults (Id, FirstName, LastName)
SELECT Id, FirstName, LastName FROM Member
WHERE 
FirstName = 'John' and LastName ='Snow' and ...-- more conditions

1 个答案:

答案 0 :(得分:3)

我不确定有没有办法直接在NHibernate中执行此操作而不使用原始sql。

您当然可以使用已有的IQueryable并从此IQueryable生成nhibernate实体。然后,您可以使用这些实体并使用IStatelessSession和批处理的组合来提高大型结果集的性能。

以下是一个很好的例子:

Speed up bulk insert operations with NHibernate

我还会看看其他答案,以提高速度。

编辑:

另一种可能的方法是使用类似这样的方法将linq查询转换为原始sql:

How can I have NHibernate only generate the SQL without executing it?

获取原始sql并在其前面添加您要创建的insert语句,并使用以下内容执行此sql:

Executing Sql statements with Fluent NHibernate