Как сказать nHibernate, чтобы не допускать дублирования записей в таблице? - PullRequest
0 голосов
/ 03 апреля 2009

У меня есть простая сущность, которая имеет Id (первичный ключ) и имя строки. Я ищу способ сказать nHibernate, чтобы не допустить повторяющихся имен в таблице.

Я хотел бы иметь метод Add, который может принимать новую сущность (с Id = 0), и при необходимости добавлять новую сущность и обновлять Id. Это работает сейчас. Если имя уже существует в таблице, я хочу просто обновить Id и вернуть существующий Id.

Я хотел бы иметь возможность назвать это так:

Foo foo = новый Foo (имя); // foo.Id = 0 FooRepository.Add (Foo);

.., а затем foo.Id <> 0, и он либо был добавлен, либо было найдено существующее имя foo.name, и его идентификатор был возвращен.

спасибо / JF

Ответы [ 2 ]

2 голосов
/ 03 апреля 2009

Вы должны установить уникальный атрибут, равный 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>

Столбец автоматически будет иметь уникальное ограничение.

0 голосов
/ 03 апреля 2009

Я не думаю, что nhibernate может совпадать с натуральным ключом. Вы должны сделать это в методе добавления в хранилище. то есть поиск по имени, если найдено, обновите имя и сохраните. (поиск по примеру может спасти вас здесь когда-нибудь)

Похоже, вы хотите использовать назначенные идентификаторы вместо суррогатных идентификаторов здесь. Может быть именем карты в качестве идентификатора и избавиться от суррогатного ключа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...