сопоставить один класс множеству классов с типом / элементом - PullRequest
1 голос
/ 10 января 2012

Моя проблема в том, что у меня есть родительские классы, и для каждого из родителей у меня есть список класса B.например, таблицы:

Изображения

id
type
item
filename

компьютеры

id
owner
age

рабочие

id
name
age

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

id=auto generate
type=1
item= id of computer

для рабочих элементы изображения:

id=auto generate
type=2
item=id of worker

Классы должны быть: Компьютеры: -id -age -owner -images Workers: -id -age -name -images

Насчет изображения, я не уверен, что мне нужно, но что-то в этом роде: -id -filename (необязательно, если это необходимо для отображения) -type -item

какая-то идея, как отобразить это?

1 Ответ

1 голос
/ 10 января 2012
class ComputerMap : ClassMap<Computer>
{
    public ComputerMap()
    {
        HasMany(x => x.Images)
            .Where("type = 1")
            .KeyColumn("item")
            .Inverse()
            .Cascade.All();
    }
}

class WorkerMap : ClassMap<Worker>
{
    public WorkerMap()
    {
        HasMany(x => x.Images)
            .Where("type = 2")
            .KeyColumn("item")
            .Inverse()
            .Cascade.All();
    }
}

class ImageMap : ClassMap<Image>
{
    public WorkerMap()
    {
        ReferencesAny(x => x.Item)
            .EntityIdentifierColumn("item")
            .EntityTypeColumn("type")
            .AddMetaValue<Computer>(1)
            .AddMetaValue<Worker>(2)
            .IdentityType<int>();     <-- maybe optional
    }
}

// in Computer and Worker have this
public void AddImage(Image image)
{
    this.Images.Add(image);
    image.Item = this
}
...