Длина столбца элемента не учитывается при автоматическом сопоставлении словаря с использованием Fluent NHibernate - PullRequest
2 голосов
/ 05 мая 2011

Я сопоставляю словарь с помощью FluentNHibernate следующим образом:

HasMany<MyEntity>(n => n.MyDictionary)
    .AsMap<string>(
        index => index.Column("LCID").Type<int>(),
        element => element.Column("Value").Type<string>().Length(1000)
    .Cascade.AllDeleteOrphan();

Как видите, я указываю длину столбца для столбца элемента «Значение».

Однакоуказанная длина столбца элемента не соблюдается;когда я смотрю на экспортированную схему базы данных (я генерирую базу данных из моих сопоставлений), столбец элемента отображается как nvarchar(255).

Сгенерированный HBM кажется правильным:

<map table="MyDictionary_Values" name="MyDictionary" mutable="true"
     cascade="all-delete-orphan">
    <key>
        <column name="MyDictionary_id"/>
    </key>
    <index type="int">
        <column name="LCID"/>
    </index>
    <element type="string" length="1000">
        <column name="Value"/>
    </element>
</map>

Вот неправильный DDL:

create table MyDictionary_Values
(
    MyDictionary_Id INT not null,

    Value NVARCHAR(255) null,

    LCID INT not null,
    primary key (MyDictionary_Id, LCID)
)

Это ошибка в NHibernate или я что-то не так делаю?

1 Ответ

3 голосов
/ 15 ноября 2011

Используйте это прохождение:

HasMany<MyEntity>(n => n.MyDictionary)
  .AsMap<string>(
      index => index.Column("LCID").Type<int>(),
      element => element.Columns.Clear().Columns.Add("Value", col => col.Length(1000))
  .Cascade.AllDeleteOrphan();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...