.hbm.xml文件中的唯一文件不会引发异常

时间:2010-09-16 12:06:23

标签: nhibernate nhibernate-mapping

我在.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();
            }    
        }

2 个答案:

答案 0 :(得分:3)

唯一属性仅在generating a DDL schema from a mapping(hbm)时使用。

如果你想用NHibernate检查唯一性,那就是数据验证,你应该看NHibernate validator。 正如拉斐尔所说,你必须编写自己的验证器。

您还可以查看natural-id元素。

除非您绝对需要在应用程序端验证唯一性,否则samplethis one会让我觉得让数据库完成这项工作可能会更好。

答案 1 :(得分:2)

NHibernate是否为您生成了数据库架构?因为即使您将属性设置为unique,如果架构没有unique约束,它也不会执行任何操作。基本上,该属性不会查询数据库寻找唯一性;它只会在insert上设置SQL constraint