Nhibernate .hbm.xml文件中唯一,未引发异常
我的.hbm.xml文件中包含以下内容Nhibernate .hbm.xml文件中唯一,未引发异常,nhibernate,nhibernate-mapping,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"> &l
<?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();
}
}
void IRepository.Save(类别实体)
{
使用(var范围=新TransactionScope(TransactionScopeOption.Required))
{
使用(ISession session=NHibernateHelper.OpenSession())
{
使用(ITransaction transaction=session.BeginTransaction())
{
session.Save(实体);
Commit();
}
}
scope.Complete();
}
}
NHibernate是否为您生成了数据库架构?因为即使将属性设置为unique
,如果架构没有unique
约束,它也不会执行任何操作。基本上,该属性不会查询数据库以寻找唯一性;它将只设置为oninsert
NHibernate是否为您生成了数据库架构?因为即使将属性设置为unique
,如果架构没有unique
约束,它也不会执行任何操作。基本上,该属性不会查询数据库以寻找唯一性;它将仅设置oninsert
唯一属性仅在(hbm)时使用
如果您想使用NHibernate检查唯一性,这是数据验证,您应该查看。
正如Rafael所说,您必须编写自己的验证器
您还可以检查元素
除非您绝对需要在应用程序端验证唯一性,否则这会让我觉得让数据库来完成这项工作可能更好 唯一属性仅在(hbm)时使用
如果您想使用NHibernate检查唯一性,这是数据验证,您应该查看。
正如Rafael所说,您必须编写自己的验证器
您还可以检查元素
除非您绝对需要在应用程序端验证唯一性,否则这会让我觉得让数据库来完成这项工作可能更好 注意,即使使用优秀的NHibernate验证器,您也必须编写自己的验证,因为它显然没有[唯一]验证器(这需要对数据库进行点击)。没错,编辑内容包括,如果必须对持久化数据进行验证,那么这可能只是一个好的做法。注意,即使使用优秀的NHibernate验证程序,您也必须编写自己的验证,因为它显然没有[唯一]验证程序(这需要对数据库进行点击)。没错,编辑内容包括,如果必须对持久化数据进行绝对验证,则这可能是一种良好的做法。谢谢,我已修改了数据库,但现在我收到了违反唯一密钥约束“UQ_uuucategories_uu0ea330e9”的错误消息。无法在对象“dbo.Categories”中插入重复键。该语句已终止,但是,我希望由NHibernate生成错误消息,(e.InnerException.message,即类似message=“无法在具有唯一索引“IX\U Category”的对象“dbo.Categories”中插入重复的键行”。\r\n该语句已终止。”…我希望nHibernate生成抛出异常消息,如JoeBilly所说,查看nHibernate验证器。然后,您可以进行nHibernate唯一性检查并抛出您想要的任何内容。谢谢,我已修改了数据库,但现在我遇到了违反唯一密钥约束“UQ_uucategories_uu0ea330e9”的错误消息。无法插入ert对象“dbo.Categories”中存在重复键。该语句已终止,但是,我希望由NHibernate生成错误消息,(e.InnerException.message,即类似message=“无法在具有唯一索引“IX_Category”的对象“dbo.Categories”中插入重复键行。\r\n该语句已终止。”…我更希望nHibernate生成抛出异常消息,如JoeBilly所说,查看nHibernate验证器。然后,您可以检查nHibernate的唯一性并抛出您想要的任何消息。