在持久化实体上调用Session.Save时,NHibernate不会抛出异常

时间:2016-05-10 22:26:47

标签: c# nhibernate

我正在编写测试用例以确保我的服务/存储库层按预期工作。我正在调用ISession.Save和一个已经在一个单独的事务中持久保存到数据库的实体。我希望Save抛出一个异常,因为该实体不是新的。而是将新条目添加到数据库中,并更新实体的ID。

第一个问题:这是预期的吗?据我所知,它应该抛出异常,但我无法在NHibernate documentation中明确地找到它。

一些代码:

public class Dashboard 
{
    public int ID { get; set; }
}

// Dashboard.hbm.xml:
<class name="Dashboard" table="Dashboard" lazy="false">
    <id name="ID" column="ID">
        <generator class="identity" />
    </id>
</class>

Dashboard dashboard = new Dashboard();
using(var transaction = Session.BeginTransaction())
{
    Session.Save(dashboard);
    transaction.Commit();
}

Session.Flush();

using(var transaction = Session.BeginTransaction())
{
    Session.Save(dashboard);
    transaction.Commit();
}

我的理解是上面的代码应该抛出异常。这是对的吗?

1 个答案:

答案 0 :(得分:0)

我已经选择通过自己抛出异常来手动处理此事。

类似的东西:

public void Save(T entity)
{
    if (entity.ID != 0)
        throw new InvalidOperationException("Attempted to save an entity which has already been saved.");

    Session.Save(entity);
}