流利的nhibernate批量保存

时间:2011-11-08 08:16:33

标签: fluent-nhibernate

我正在读取xml文件,并在数据库中提升现有记录。

我将xml读入c#对象列表并遍历它们,在数据库中查找相应的记录并从xml / c#值更新它。

然后我保存了这个对象 - 但是在流利的nihibernate中有任何方法可以将对象添加到列表中(可能是1000条记录)并保存bacth

底线它是性能我是 - 我一直在使用亚音速2和3并选择了亚音速2,因为它更快 - 但我只是想知道使用流畅的nhibernate做这个的任何观点 - 例子等< / p>

1 个答案:

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