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>'