Сложный столбец. (Id + строка) - PullRequest
2 голосов
/ 22 февраля 2012

У меня есть таблица со строковым столбцом.Этот столбец должен состоять из некоторого текста + id текущей строки.Идентификатор, сгенерированный базой данных.

Например: строка: (Id) 12, (MyColumn) 'abcde12'

Каков наилучший способ сделать это?Могу ли я сделать это с помощью NHibernate, или это можно сделать только с помощью SQL?

Ответы [ 3 ]

0 голосов
/ 22 февраля 2012

В зависимости от того, что вы подразумеваете под «идентификатором, сгенерированным базой данных», вам, возможно, придется разделить вставку новых записей на два шага.

Если ваш идентификатор генерируется чем-то вроде автоинкремента MySQL, он будет выглядетькак это:

Insert into your_table (some_text_col)
Values ('some_text')

Это даст вам

ID   some_text_col   combined
 1   'some_text'      Null

Вы можете обновить этот столбец с помощью

Update your_table
set combined = concat(some_text_col, id)
where id = LAST_INSERT_ID()

Примечание: Это должно работать для MySQL, хотяЯ не проверял это.Это может быть легко адаптировано для других СУБД.Возможно, вы захотите использовать триггеры (если ваша БД их поддерживает) для автоматизации Update.

0 голосов
/ 23 февраля 2012

Зачем хранить 12 в двух местах?

Хранить 12 в столбце ID и abcde в MyColumn.

Когда вы хотите получить,Вы можете объединить два значения или извлечь их в виде отдельных столбцов, независимо от того, что требуется приложениям.Или вы можете использовать View:

CREATE VIEW Extra AS
( SELECT ID
       , MyColumn
       , CONCAT(ID, MyColumn) AS ExtraColumn
  FROM TableX
) ;

Тогда вы можете использовать:

SELECT ExtraColumn FROM Extra

или:

SELECT * FROM Extra
0 голосов
/ 22 февраля 2012

Я знаю, что это ответит на ваш вопрос напрямую, но как насчет этого подхода:

public virtual string MyCalculatedField {
  get { return MyColumn + Id.ToString(); }
}

При этом вам не нужно выполнять двойное обновление после того, как БД сгенерирует ваш ID.

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