来自不同数据库的Nhibernate createsqlquery将不会持久存在

时间:2010-07-16 18:14:01

标签: nhibernate linq-to-nhibernate

我首先尝试从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等做了同样的事情。

有什么方法可以强行插入/更新吗?

1 个答案:

答案 0 :(得分:2)

NHibernate无法知道您正在查询不同的数据库,这就是为什么它认为该实例已经持久且不会再次尝试插入。

您可以使用StatelessSession,它不跟踪实体,并使用Insert方法。 Evict并不是那么糟糕。