这是用户和角色这两个模型
def uploadToS3(file_name):
filepath = file_name + file_extension
camera.capture(filepath)
conn = tinys3.Connection(access_key_id, secret_access_key)
f = open(filepath, 'rb')
conn.upload(filepath, f, bucket_name,
headers={
'x-amz-meta-cache-control': 'max-age=60'
})
if os.path.exists(filepath):
os.remove(filepath)
这些是已创建的映射
public class User
{
public User()
{
Roles = new List<Role>();
}
public virtual int UserId { get; set; }
public virtual string UserName { get; set; }
public virtual IList<Role> Roles { get; set; }
}
public class Role
{
public virtual Guid RoleId { get; set; }
public virtual string Name { get; set; }
public virtual IList<User> Users { get; set; }
}
我的问题是:我们如何使用Nhibernate对这些表执行批量插入/更新操作?
预先感谢
答案 0 :(得分:0)
您的情况还不够清楚;以下是适用于批量插入的常规步骤:
BatchSize
= [您的首选值]。此操作数量将由NHibernate批量处理。FlushMode
= FlushMode.Commit
。这将指示NHibernate在提交事务后刷新所有更改。ISession
打开sessionFactory.OpenSession()
。session.BeginTransaction()
开始交易。transaction.Commit()
进行交易。如@FlorianLim所评论,如果您不想保持状态,则可能更喜欢IStatelessSession
。
模板代码以及有关此内容的更多说明,here:
using (ISession session = sessionFactory.OpenSession()) using (ITransaction tx = session.BeginTransaction()) { for (int i = 0; i < 100000; i++) { Customer customer = new Customer(.....); session.Save(customer); } tx.Commit(); }
但是,我怀疑这是否适合您的情况。 UserId
列的数据类型为Identity
。批处理不起作用。
请注意,如果您使用身份标识符生成器,NHibernate将透明地禁用ADO级别的插入批处理。