我们的数据团队中有人添加了一个数据库约束,虽然它非常有效且可取,但它为NHibernate带来了很大的问题,因为似乎没有办法覆盖NHibernate的保存顺序。NHibernate - 必须更改保存顺序以满足数据库约束?
给定一个(例如傻)类是这样的:
public Person
{
public virtual string FirstName { get; set; }
public virtual bool IsCurrent { get; set; }
}
并且仅在所述背衬表中的一个记录可在同一时间是IsCurrent=true
的约束。 。 。
如果我试图通过设置IsCurrent=false
来“废弃”现有记录,并用0123'的新记录替换它,我在保存中得到了一个ADO异常,因为NHibernate试图首先执行Insert,违反了SQL Server约束一次只有一条记录可以是IsCurrent=true
。
我看到两个选项:
- 可以在SQL Server配置只在事务结束时检查约束?下面的语句(在旧行的“更新”
IsCurrent=false
将未打破约束。 - 灿NHibernate的保存顺序(同一类型的实例)是 修改或以任何方式“暗示”?
感谢 杰夫
你可以发布你用来保存数据的代码吗?此外,它听起来像你正在为你的实体ID使用SQL Server IDENTITY,它有问题,NHibernate必须实际插入第二条记录,以便在事务完成之前获得它的ID。 – 2010-09-23 02:58:31