使用type / item将一个类映射到多个类

时间:2012-01-09 23:33:57

标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping

我的问题是我有父类,并且对于每个父母我都有classB列表。 例如,表格是:

图片

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 -年龄 -所有者 -图片 工作人员: -ID -年龄 -名称 -images

关于图像,我不确定我需要什么,但是类似的东西: -ID -文件名 (可选,如果映射需要) -类型 -Item

有些想法如何映射?

1 个答案:

答案 0 :(得分:1)

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
}