Отображение NHibernate многие-ко-многим - PullRequest
0 голосов
/ 18 мая 2009

Я пытаюсь отобразить здесь устаревшую базу данных и столкнулся с проблемой. В моей схеме есть понятие Модули и понятие Переменных. Каждый модуль состоит из одной или нескольких переменных, и каждая из этих переменных имеет свойства, специфичные для этого модуля. Varable сидит на Отношении.

Основываясь на приведенных ниже классах, как лучше всего отобразить ModuleVariable, который для меня выглядит как отношение многие ко многим со специальными свойствами ??

Вот классы:

public class Relation
{
    public virtual string RelationId
    {
        get;
        set;
    }
}

public class Variable
{
    public virtual string VariableId
    {
        get;
        set;
    }

    public virtual Relation RelationId
    {
        get;
        set;
    }
} 

public class Module
{
    public virtual string ModuleId
    {
        get;
        set;
    }
}

public class ModuleVariable
{       
    public virtual Module ModuleId
    {
        get;
        set;
    }

    public virtual Variable VariableId
    {
        get;
        set;
    }

    public virtual Relation RelationId
    {
        get;
        set;
    }

    public virtual Variable DownloadID
    {
        get;
        set;
    }

    public virtual Variable UploadID
    {
        get;
        set;
    }

    public string Repeatable
    {
        get;
        set;
    }
}

Ответы [ 2 ]

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

Чтобы иметь отношение «многие ко многим» с дополнительными свойствами в отношении таких отношений, необходимо сделать ModuleVariable сущностью домена и отобразить ее отдельно от Module и Variable.

Module и Variable будут иметь коллекцию ModuleVariable сущностей, а ModuleVariable будет иметь ссылку "многие к одному" на две другие. Что-то вроде:

<!-- Module mapping -->
<bag name="ModuleVariables" inverse="true">
    <key column="Module_id" />
    <one-to-many class="ModuleVariable" />
</bag>

<!-- ModuleVariable mapping -->
<many-to-one name="Module" column="Module_id" />
0 голосов
/ 19 мая 2009

Функция «многие ко многим» работает только на столе без дополнительных свойств. Это потому, что многие-ко-многим представляет коллекцию предметов внутри другого объекта.

Если в вашей таблице ModuleVariable нет других столбцов, вы можете использовать так:

<bag name="Modules" table="MODULE_VARIABLE" cascade="save-update" lazy="true" >
  <key>
    <column name="Variable_Id" not-null="true"/>
  </key>
  <many-to-many class="Module">
    <column name="Module_Id" not-null="true"/>
  </many-to-many>
</bag>

А в вашем домене классы:

public IList Modules { get; set; }

А для использования нужно добавить модули:

variable.Modules.Add(module);

Надежды на помощь.

...