使用 Fluent.NHibernate,如何根据 Select 语句执行插入
Using Fluent.NHibernate, how can I do an Insert based on a Select statement
我有一个相当复杂的逻辑片段,它为我生成一个 IQueryable
,我使用 Fluent.NHibernate
.
从我的数据库中获取 return 数据
但是,我需要能够将此查询的结果存储回数据库(实际上只是主键,但这是一个附带问题)
如何根据 IQueryable
生成插入语句 我已经必须像下面生成的示例那样得到 SQL:
INSERT INTO MySavedResults (Id, FirstName, LastName)
SELECT Id, FirstName, LastName FROM Member
WHERE
FirstName = 'John' and LastName ='Snow' and ...-- more conditions
我不确定是否有一种方法可以直接在 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 并在其前面加上您要创建的插入语句,然后使用类似以下内容执行此 sql:
Executing Sql statements with Fluent NHibernate
我有一个相当复杂的逻辑片段,它为我生成一个 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
我不确定是否有一种方法可以直接在 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 并在其前面加上您要创建的插入语句,然后使用类似以下内容执行此 sql:
Executing Sql statements with Fluent NHibernate