我在.hbm.xml文件中有以下内容
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Core.Domain.Model"
assembly="Core">
<class name="Category" table="Categories" dynamic-update="true">
<cache usage="read-write"/>
<id name="Id" column="Id" type="Guid">
<generator class="guid"/>
</id>
<property name="Name" length="100">
<column name="Name" unique="true" index="IX_Category"/>
</property>
</class>
</hibernate-mapping>
我有以下代码,但是,我可以看到,当我为Name字段插入重复值时,没有引发任何异常。为什么会这样?
void IRepository<Category>.Save(Category entity)
{
using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
using (ISession session = NHibernateHelper.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Save(entity);
transaction.Commit();
}
}
scope.Complete();
}
}
答案 0 :(得分:3)
唯一属性仅在generating a DDL schema from a mapping(hbm)时使用。
如果你想用NHibernate检查唯一性,那就是数据验证,你应该看NHibernate validator。 正如拉斐尔所说,你必须编写自己的验证器。
您还可以查看natural-id元素。
答案 1 :(得分:2)
NHibernate是否为您生成了数据库架构?因为即使您将属性设置为unique
,如果架构没有unique
约束,它也不会执行任何操作。基本上,该属性不会查询数据库寻找唯一性;它只会在insert
上设置SQL constraint。