使用NHibernate将行旋转到属性/列中

时间:2012-09-18 03:13:58

标签: c# .net nhibernate fluent-nhibernate nhibernate-mapping

使用NHibernate将以下表格结构建模到下面的'pivoted'域模型中的最佳方法是什么?

映射属性是微不足道的;它确实是我不确定的属性/虚拟列的行的枢轴。

数据库结构

属性表

Id      Name                Type
Attr1   Some Attribute 1    Bool
Attr2   Some Attribute 2    Bool
Attr3   Some Attribute 3    Bool

广告表

Id  Name
Ad1 Some ad 1

AdAttributes表

Id    AdId  AttributeId Value
100   Ad1   Attr1       true
101   Ad1   Attr2       false
102   Ad1   Attr3       true

所需的NHibernate对象模型

class Attribute{
    public int Id {get;set;}
    public Type TheType {get;set;}
    public string Name {get;set;}
}

class AdAttribute{
    public int Id{get;set;}
    public Ad Ad{get;set;}
    public Attribute Attribute{get;set;}

    public bool Value{get;set;}
}

class Ad{
    ...

    class Attributes{
        public AdAttribute Attr1{get;set;}
        public AdAttribute Attr2{get;set;}
        public AdAttribute Attr3{get;set;}
    }

    Attributes TheAttributes{get; protected set;}
}

表格结构并非一成不变,但目标是不将属性存储为广告中的列。不同的广告类型将具有不同的属性,但它们不会动态更改,即广告类型1将始终具有10个属性,广告类型2将始终具有5个属性等。

原始NHibernate HBM答案首选,但Fluent映射正常

1 个答案:

答案 0 :(得分:0)

最终,我们决定使用不同的设计来消除这种不必要的复杂性。

Firo关于NHibernate的IDictionary支持的观点很好,但很可能是解决方案