【发布时间】:2013-11-08 22:28:34
【问题描述】:
我有一个只有一个字段 (Value) 和以下映射的实体:
Id(x => x.Value).Column("value").Length(150);
当我执行以下代码时
using (var tx = Database.BeginTransaction())
{
for (int i = 0; i < 10; i++)
{
var e = new Entity { Id = "Value" + i };
Database.Entities.Add(e);
}
tx.Commit();
}
NHibernate 在每个 INSERT 调用之前执行 SELECT 语句。像这样的:
NHibernate: SELECT * FROM entity entity_ WHERE entity_.value=@p0; @p0 = 'Value0'
NHibernate: INSERT INTO entity ...
NHibernate: SELECT * FROM entity entity_ WHERE entity_.value=@p0; @p0 = 'Value1'
NHibernate: INSERT INTO entity ...
NHibernate: SELECT * FROM entity entity_ WHERE entity_.value=@p0; @p0 = 'Value2'
NHibernate: INSERT INTO entity ...
如果我启用批量模式(设置adonet.batch_size),它将首先执行所有SELECT 语句,然后在批量模式下执行INSERT。
这是预期的行为吗?如果是这样,我应该怎么做才能避免这种情况?
【问题讨论】:
-
使用 Id 创建实体将从数据库中获取它,因此这是预期的行为
-
“数据库”是什么对象类型?
标签: c# sql nhibernate