Почему NHibernate создает таблицу без первичного ключа? - PullRequest
1 голос
/ 22 апреля 2011

Мы создаем базу данных, используя класс schemaExport nHibernate.Теперь у меня есть класс с атрибутами, из которого мы сгенерировали отображение nhibernate.Часть этого класса:

public class PluginInstance
{
    ...
    [Bag(2, Name = "RouteParams", Access = "property", Table = "CMS_PluginInstanceRouteParams")]
    [Key(3, Column = "ParamId")]
    [Element(4, Column = "Param", Type = "string")]
    public virtual IList<String> RouteParams
    {
        get { return _routeParamsField; }
        set { _routeParamsField = value; }
    }
    ...
}

Генерируемая часть отображения nHibernate имеет следующий вид:

<bag name="RouteParams" access="property" table="CMS_PluginInstanceRouteParams">
  <key column="ParamId" />
  <element column="Param" type="string" />
</bag>

Для этого свойства правильно таблица "CMS_PluginInstanceRouteParams", созданная при вызове:

var schemaExport = new SchemaExport(configuration);
schemaExport.Create(false, true);

Но мне было интересно, почему в этой таблице нет первичного ключа.Сгенерированная структура: database structure

Столбец ParamId правильно является внешним ключом таблицы класса PluginInstance, а в столбце Param - значения хранимого свойства RouteParams.

Isнет необходимости в первичном ключе в этой таблице?Можно ли установить первичный ключ для этого свойства с помощью NHibernate.Mapping.Attributes?

1 Ответ

2 голосов
/ 23 апреля 2011

Таблица не сопоставлена ​​как сущность и как таковая никогда не будет выбираться из базы данных сама по себе, поэтому NHibernate не нуждается и не будет создавать первичный ключ для этой таблицы.

Редактировать:

Если вы хотите иметь первичный ключ в этой таблице, я предлагаю добавить для этого дополнительный столбец.Использование ParamId в качестве первичного ключа не будет работать для вас.NHibernate создаст таблицу с первичным ключом, если вы создадите класс и соответствующий файл сопоставления для RouteParams.

...