Отображение таблицы Fluent-NHibernate без первичного ключа - PullRequest
8 голосов
/ 05 мая 2009

Я пытаюсь создать сопоставление с таблицей базы данных, которая не имеет первичных ключей / ссылок.

public class TestMap : ClassMap<<Test>Test> {

    public TestMap() {

        WithTable("TestTable");

        Map(x => x.TestColumn);

    }

}

Это терпит неудачу и ожидает идентификатор или составной идентификатор. Возможно ли это в беглом nhibernate?

Ответы [ 6 ]

4 голосов
/ 23 мая 2011

В Oracle, по крайней мере, я использовал "ROWID" для этого. Для mssql вы можете использовать встроенную функцию «ROW_NUMBER ()» для доступа к таблице только для чтения, но я этого не пробовал ...

2 голосов
/ 05 мая 2009

Нет. Вам потребуется добавить суррогатный первичный ключ, такой как столбец идентификаторов в SQL Server, чтобы отобразить эту таблицу. Насколько я знаю, это не поддерживается самим NHibernate.

Почему у вас нет первичного ключа в этой таблице?

0 голосов
/ 15 августа 2013

Вы можете отобразить объект в таблицу без ключей, определенных в базе данных. Я делаю это в устаревших базах данных SQL Server. Однако в таблице должен быть ключ-кандидат (некоторый набор столбцов, в котором фактически хранится уникальная комбинация значений). Понятие сущности включает в себя понятие некоторой идентичности . Вместо этого в коде вы пытаетесь отобразить сущность без идентичности, что невозможно.

0 голосов
/ 08 апреля 2013

Если таблица содержит данные, принадлежащие другому объекту, вы можете сопоставить их как набор компонентов . Компоненты не идентифицируются сами по себе, но они принадлежат другому объекту, который идентифицирован .

0 голосов
/ 11 февраля 2013

Если мы можем принести столбец из таблицы без первичного ключа / идентификатора, то мы можем использовать свободный, как показано ниже:

Id(x => x.TempID).Column("TempID");
0 голосов
/ 23 мая 2011

Насколько я знаю, эта функция не поддерживается nhibernate. Однако, как правило, у вас всегда должен быть какой-то идентификатор, и если вы оказались в ситуации, когда вам кажется, что он вам не нужен, вам следует оценить свою модель данных. Должен существовать идентификатор, будь то первичный ключ для конкретной таблицы или суррогатный ключ из другой таблицы. Это не только гарантирует, что nhibernate может обрабатывать таблицу, но и повышает производительность посредством индексирования.

Прежде чем вы начнете предполагать, что nhibernate не удовлетворит ваши потребности, подумайте, почему у вас нет ключа на столе и какой смысл его не иметь.

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