我有一个简单的实体,它有一个Id(主键)和一个字符串名称。我正在寻找一种方法告诉nHibernate不要在表中允许重复的名称。
我想要一个可以接受新实体(Id = 0)的Add方法,并在必要时添加新实体&更新ID。这现在有效。如果表中已存在该名称,我只想更新Id并返回现有的Id。
我希望能够这样称呼它:
Foo foo = new Foo(名字); // foo.Id = 0 FooRepository.Add(FOO);
..然后foo.Id<> 0,它被添加或找到现有的foo.name并返回其ID。
感谢/ JF
答案 0 :(得分:2)
您必须在映射文件中将unique属性设置为true才能使其成为唯一列。
<property name="serialNumber" unique="true" type="string" column="SERIAL_NUMBER"/>
如果您希望该列成为该表的主键,则输入
<id name="CommentId">
<column name="comment_id" not-null="false"/>
<generator class="identity"/>
</id>
该列将自动具有唯一约束。
答案 1 :(得分:0)
我不认为nhibernate可以在自然键上另外匹配。您必须在存储库中的add方法中执行此操作。 即按名称查找,如果找到则更新名称并保存。(通过示例查找可能会在此处保存一段时间)
看起来你想在这里使用指定的id而不是代理id。 可以将地图名称作为标识符并删除代理键