문제

질문 : nHibernate (유창함)를 사용하여 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();
            }
        }
    }

User-ID (Auto-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

인기 답변

다음을 사용하여 올바른 매핑을 시도하십시오.

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


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.