Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以向数据库发送批插入但不更新查询_C#_Hibernate_Nhibernate_Fluent Nhibernate - Fatal编程技术网

C# 可以向数据库发送批插入但不更新查询

C# 可以向数据库发送批插入但不更新查询,c#,hibernate,nhibernate,fluent-nhibernate,C#,Hibernate,Nhibernate,Fluent Nhibernate,我可以成功地向数据库发送批插入请求,但不能发送更新。我尝试了不同的方法,但似乎没有什么问题批量更新 我找不到解决这个问题的办法。我尝试过的一些例子(不是全部): *重要。我不能使用无状态会话。 下面是我用来测试这个案例的单元测试: [Test] public void Test_BatchUpdateTest() { // Arrange const int batchSize = 2; var dto1Oid = Guid.Empty; var dt

我可以成功地向数据库发送批插入请求,但不能发送更新。我尝试了不同的方法,但似乎没有什么问题批量更新

我找不到解决这个问题的办法。我尝试过的一些例子(不是全部):

*重要。我不能使用无状态会话。

下面是我用来测试这个案例的单元测试:

[Test]
public void Test_BatchUpdateTest()
{
    // Arrange
    const int batchSize = 2;

    var dto1Oid = Guid.Empty;
    var dto2Oid = Guid.Empty;

    // Generates a transaction, executes the content, and commit it afterwards. 
    // Batch inserts are correct, both are sent with no extra roundtrips to DB.
    businessObject.Transact(() => {
        var dto1 = new DtoType {ArchivingDate = DateTime.Now.AddDays(-7)};
        var dto2 = new DtoType {ArchivingDate = DateTime.Now};
        businessObject.Save(dto1); // Calls Session.SaveOrUpdate
        businessObject.Save(dto2); // Calls Session.SaveOrUpdate

        dto1Oid = dto1.Oid ?? Guid.Empty;
        dto2Oid = dto2.Oid ?? Guid.Empty;
    }, batchSize); // Calls Session.SetBatchSize(batchSize); before executing content above, sets it back to default after commit

    // Act
    businessObject.Transact(() =>
    {
        var dto1 = businessObject.LoadObject(dto1Oid);
        var dto2 = businessObject.LoadObject(dto2Oid);

        // Changing data to generate Update requests (should be sent in batches)
        dto1.ArchivingDate = DateTime.Now.AddDays(7);
        dto2.ArchivingDate = DateTime.Now.AddDays(1);

        businessObject.Save(dto1);
        businessObject.Save(dto2);
    }, batchSize); // Calls Session.SetBatchSize(batchSize); before executing content above, sets it back to default after commit

    // Assert
    //<Check DB Requests on NHibernate Profiler> // On NHProfiler, the inserts are sent in a single request as seen in "Insert request"
}
更新请求1(第一次更新应与下面的请求2一起进行):

更新数据类型
设置存档日期=“”
其中Id=“”
更新请求2(第二次更新,应与上述请求1成批进行):

更新数据类型
设置存档日期=“”
其中Id=“”

我的目标是只为两个更新发送一个请求,就像在insert请求中一样。

问题是我使用了NHibernate v4,数据结构
DtoType
使用版本控制。NH v4不支持批量更新版本化结构。该支持是在v5()中添加的 使用v5并添加nhibernate设置
adonet.batch\u versioned\u data=true
解决了我的问题。我现在可以向数据库发送批更新请求

INSERT INTO DtoType
            (... Fields)
VALUES      (... Values)

--//////////////////////////////////////////////////

INSERT INTO DtoType
            (... Fields)
VALUES      (... Values)
UPDATE DtoType
SET    ArchivingDate = '<updated date>'
WHERE  Id = '<dto1 id>'
UPDATE DtoType
SET    ArchivingDate = '<updated date>'
WHERE  Id = '<dto2 id>'