我首先尝试从db中提取客户,但如果我的客户不存在,那么我在服务器上调用另一个db来获取信息。我想在我的数据库中保存客户信息。会话目前已连接到我的数据库。
var customer = Session.Linq<Customer>().FirstOrDefault(x=>x.customernumber == cusotmerNumber);
if(customer == null) {
var sql = @"select ... from anotherdb.dbo.customer where customernumber = :customer";
customer = Session.CreateSqlQuery(sql)
.AddEntity(typeof(Customer))
.SetInt32("CustomerNumber",CustomerNumber).List<Customer>().FirstOrDefault();
using(Session.BeginTransaction()) {
Session.Save(customer);
Session.Transaction.Commit();
}
}
我遇到的问题是,当我调用Session.save时,它不会将客户从备用数据库持久存储到我当前的数据库中。如果我将所有值分配给新的客户对象,那么如果使用.Save。
则会保存当我在提交后查看事务属性时,它会显示它已提交的标志等,并且不会抛出任何错误。我对Session.Flush,Session.SaveOrUpdate等做了同样的事情。
有什么方法可以强行插入/更新吗?
答案 0 :(得分:2)
NHibernate无法知道您正在查询不同的数据库,这就是为什么它认为该实例已经持久且不会再次尝试插入。
您可以使用StatelessSession,它不跟踪实体,并使用Insert
方法。 Evict
并不是那么糟糕。