我正在读取xml文件,并在数据库中提升现有记录。
我将xml读入c#对象列表并遍历它们,在数据库中查找相应的记录并从xml / c#值更新它。
然后我保存了这个对象 - 但是在流利的nihibernate中有任何方法可以将对象添加到列表中(可能是1000条记录)并保存bacth
底线它是性能我是 - 我一直在使用亚音速2和3并选择了亚音速2,因为它更快 - 但我只是想知道使用流畅的nhibernate做这个的任何观点 - 例子等< / p>
答案 0 :(得分:0)
会话有一个你想要的缓存。如果您在sessionfactory的配置中启用了批处理,则以下内容将批处理更新
using (var tx = session.BeginTransaction())
{
const int BATCH_SIZE = 1000;
IList<MyObjects> myobjects = ReadInXML();
Dictionary<int, MyObjects> batch = new Dictionary<int, MyObjects>(BATCH_SIZE);
for (int i = 0; i < myobjects.Count; i++)
{
batch.Add(myobjects[i].Id, myobjects[i]);
if (batch.Count < BATCH_SIZE)
continue;
var entities = session.QueryOver<MyEntity>()
.WhereRestrictionOn(x => x.Id).IsIn(batch.Keys)
.List();
foreach (var entity in entities)
{
Update(entity, batch[entity.Id]);
}
// the session knows all entities it has loaded, no need for session.Update();
session.Flush();
// remove all processed entities from the session cache to speed up things
session.Clear();
// prepare for next batch
batch.Clear();
}
tx.Commit();
}