【问题标题】:nHibernate BulkInsert Identity column?nHibernate BulkInsert Identity 列?
【发布时间】:2012-04-03 22:45:11
【问题描述】:

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

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

像这样:

    // 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();
            }
        }
    }

它工作正常,只是新分配了用户 ID(自动 ID)。

这是 T_User

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 保留 ID? 之后我需要插入用户组映射,所以如果 ID 更改,这将失败...

.NET & SqlClient 有 SqlBulkCopy 和

System.Data.SqlClient.SqlBulkCopyOptions.KeepIdentity

为此。

但是 nHibernate 有什么?

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

System.Data.SqlClient.SqlBulkCopyOptions.KeepNulls

【问题讨论】:

    标签: nhibernate fluent-nhibernate sqlbulkcopy fluent-nhibernate-mapping identity-column


    【解决方案1】:

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

    private ISessionFactory CreateSessionFactory(Action<Configuration> addconfigure)
    

    和代码

    var sessionFactory = CreateSessionFactory(config =>
        ((SimpleValue)config.GetClassMapping(typeof(User)).Identifier)
            .IdentifierGeneratorStrategy = "assigned");
    

    【讨论】:

      【解决方案2】:

      尝试正确的映射:

      mapping => mapping.Id(x => x.Id).GeneratedBy.Assigned()
      

      【讨论】:

      • 但是 ... Id(x => x.BE_ID).GeneratedBy.Identity().Column("BE_ID");基本上是正确的,我希望它是一个生成的身份(稍后,可以在 BackOffice 中创建用户)。我只想关闭初始表填充的自动分配。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多