C# NHibernate在每次插入之前执行选择
我有一个只有一个字段(C# NHibernate在每次插入之前执行选择,c#,sql,nhibernate,C#,Sql,Nhibernate,我有一个只有一个字段(值)和以下映射的实体: 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
值
)和以下映射的实体:
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();
}
如果我启用批量模式(设置adonet.batch\u size
),它将首先执行所有SELECT
语句,然后在批量模式下执行INSERT
语句
这就是我们想要的行为吗?如果是这样,我应该怎么做来避免这种情况?这种行为是正确的,与以下事实有关:
会话.SaveOrUpdate(e)
仅使用
Database.Entities.Add(e)
后面的Save(e)
,不会发布支持基础设施选择 创建Id为的实体将从数据库中获取该实体,因此不知道“数据库”是什么对象类型?非常感谢,Radim!这完全有道理:如果我调用SaveOrUpdate
,它首先需要知道实体是否存在!我尝试了Save
,效果非常好;)如果这有帮助的话,那就太好了。享受NHibernate。。。神奇的工具;)
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 ...