如何使用Fluent nhibernate正确更新行?

时间:2014-12-01 12:48:09

标签: c# nhibernate fluent-nhibernate

我有第二个映射:

public class OrderMap : ClassMap<tOrder>
{
    public OrderMap()
    {
        Table("tOrder");

        Id(m => m.Id, "Ref").GeneratedBy.Native();

        Map(m => m.OrderNo);
        Map(m => m.Taken);
        Map(m => m.DateRequired);

        Component(x => x.Process, m =>
        {
            m.Map(x => x.ProcessId);
        });

        References(x => x.Customer, "CustomerId").ReadOnly();
    }
}

当我从数据库中获取数据时工作正常,当我更改某些字段并尝试更新数据库中的数据时,我收到错误:批量更新从更新返回了意外的行数;实际行数:2;预期:1 (在交易提交时)。

我试图找到答案,我找到的解决方案之一是:

SET NOCOUNT ON;
触发器中的

。 触发器不是我的,所以我无法改变它,实际上我认为我在映射中遗漏了一些东西。

如何解决这种错误以及我做错了什么?

P.S抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

如果您正在尝试更新您的实体........但是正在以“断开连接模式”进行此操作(根据需要创建ISession ...(而不是让ISession持续存在)。 ......那么你可能想要使用.Merge()方法。

但你需要弄清楚你是在做连接还是断开连接.......它会改变你将要使用的“策略”和代码。

public void UpdateMyNHiberateEntity(MyNHiberateEntity item)
{
    using (ISession session = ISessionCreator.OpenSession()) /* You won't have this method probably, but your code will create a new ISession here */
    {
        using (ITransaction transaction = session.BeginTransaction())
        {
            session.BeginTransaction();
            MyNHiberateEntity mergedItem = session.Merge(item);
            transaction.Commit();
        }
    }
}