Как можно сопоставить коллекцию строк в NHibernate, используя отношение «многие ко многим»? - PullRequest
2 голосов
/ 10 июля 2009

Учитывая следующую модель фиксированного домена:

public class Sentence {
    public int Id { get; private set; }
    public string Author { get; set; }
    public string[] Words { get; set; }
}

И следующая предложенная нормализованная схема базы данных:

create table Sentence (
    Id int identity(1,1) not null primary key,
    Author varchar(450)
)
create table Word (
    Id int identity(1,1) not null primary key,
    Value varchar(450) not null unique
)
create table Sentence_Word (
    SentenceId int foreign key references Sentence (Id),
    WordId int foreign key references Word (Id),
    SortIndex int not null,
    primary key (SentenceId, WordId),
    unique (SentenceId, SortIndex)
)

Как бы вы создали файл сопоставления NHibernate?

Это было бы легко, если бы мы могли добавить другую сущность домена Word и затем изменить свойство Words для Sentence на Word[] вместо string[] (это было бы стандартом многие-ко-многим отношения сущности), но тип string[] для свойства является обязательным и не может быть изменен.

Эта проблема аналогична другому вопросу StackOverflow , за исключением того, что для правильной нормализации данных необходимо использовать отношение «многие ко многим» (набор слов относительно мал, в то время как их сочетание в предложениях огромное), поэтому не сразу понятно, как можно применять стандартные коллекции на основе значений.

1 Ответ

0 голосов
/ 11 июля 2009

Вы можете добавить объект Word для домена, как вы предлагаете, реализовать коллекцию Word в предложении и продолжить представлять массив Word [] в виде строки []. Просто динамически собирайте массив Word [] из коллекции Word при каждом доступе к свойству. Если производительность является проблемой, вы можете кэшировать и перестраивать массив Word [], только если коллекция Word изменилась.

Это было бы легко, если бы мы могли добавить другую сущность домена Word и затем изменить свойство Words в предложении на Word [] вместо string [] (это было бы стандартным отношением сущностей многие ко многим), но Тип string [] для свойства является обязательным и не может быть изменен.

...