首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nHibernate BulkInsert标识列?

nHibernate BulkInsert标识列?
EN

Stack Overflow用户
提问于 2012-03-19 20:37:58
回答 2查看 749关注 0票数 0

问:我正在使用nHibernate (fluent)从XML批量插入数据。

我将XML文件读入datatable,然后从它创建一个列表。然后,我在该列表上运行BulkInsert。

如下所示:

代码语言:javascript
复制
    // http://stackoverflow.com/questions/982295/saving-1000-records-to-the-database-at-a-time
    public static void BulkInsert(List<dynamic> ls)
    {
        //List<DB.Tables.T_Users> ls = new List<DB.Tables.T_Users>();
        // Read from DataTable


        var sessionFactory = CreateSessionFactory();

        //using (ISession session = sessionFactory.OpenSession())

        // http://davybrion.com/blog/2008/10/bulk-data-operations-with-nhibernates-stateless-sessions/
        using (IStatelessSession session = sessionFactory.OpenStatelessSession())
        {
            using (var tx = session.BeginTransaction())
            {
                session.SetBatchSize(ls.Count);
                foreach (var objThisItem in ls)
                {
                    //session.SaveOrUpdate(objThisItem);
                    session.Insert(objThisItem);
                }
                tx.Commit();
            }
        }
    }

它工作得很好,只是新分配了User-ID (Auto-ID)。

这是T_User

代码语言:javascript
复制
CREATE TABLE [dbo].[T_User](
    [USR_ID] [int] IDENTITY(1,1) NOT NULL,
    [USR_Name] [nvarchar](50) NULL,
    [USR_Prename] [nvarchar](50) NULL,
    [USR_User] [nvarchar](50) NULL,
    [USR_Password] [nvarchar](50) NULL,
    [USR_Language] [nvarchar](5) NULL,
    [USR_Hash] [nvarchar](50) NULL,
    [USR_isLDAPSync] [bit] NOT NULL,
    [USR_Domaene] [nvarchar](255) NULL,
    [USR_Hide] [bit] NOT NULL,
PRIMARY KEY CLUSTERED 
(
    [USR_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

如何使用nHibernate插入用户并保留I?之后我需要插入用户-组映射,因此如果ID发生更改,此操作将失败...

.NET & SqlClient有SqlBulkCopy和

System.Data.SqlClient.SqlBulkCopyOptions.KeepIdentity

就为了这个。

但是nHibernate有什么呢?

当我在它的时候,它有什么用呢?

代码语言:javascript
复制
System.Data.SqlClient.SqlBulkCopyOptions.KeepNulls
EN

回答 2

Stack Overflow用户

发布于 2022-02-11 15:54:36

您可以创建临时Sessionfactory。假设你有

代码语言:javascript
复制
private ISessionFactory CreateSessionFactory(Action<Configuration> addconfigure)

和代码

代码语言:javascript
复制
var sessionFactory = CreateSessionFactory(config =>
    ((SimpleValue)config.GetClassMapping(typeof(User)).Identifier)
        .IdentifierGeneratorStrategy = "assigned");
票数 1
EN

Stack Overflow用户

发布于 2012-03-19 20:57:29

尝试使用以下命令更正映射:

代码语言:javascript
复制
mapping => mapping.Id(x => x.Id).GeneratedBy.Assigned()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9770334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档