映射父Enum时生成子对象(Fluent Nhibernate)

时间:2012-10-17 15:30:55

标签: c# nhibernate inheritance enums fluent-nhibernate

我正在做一些项目,我遇到了一些我不知道是否可以解决的问题。 所以我的问题是这样的:

我的项目中有4个课程:

public abstract class ABaseDynamicLayer
{
    public virtual int LayerID { get; set; }
    public virtual string URIPath { get; set; }
}

public class RasterDynamicLayer : ABaseDynamicLayer
{
}

public class TerrainDynamicLayer : ABaseDynamicLayer
{
}

public class VectorDynamicLayer : ABaseDynamicLayer
{
}

现在我的数据库看起来像这样:

T_DYNAMIC_LAYERS

ID  |   URIPath  |  TYPE  |
---------------------------
1   | c:\map1.mp |   1    |
2   | c:\map2.mp |   3    |
3   | c:\map5.mp |   2    |

T_TYPES

ID  |  DESCRIPTION  |
---------------------
1   |  Raster       |
2   |  Terrain      |
3   |  Vector       |

现在我的目标是将T_DYNAMIC_LAYERS映射到我的项目,当我这样做时,我不想保存图层的类型,而是想要从我的类列表中创建拟合对象作为T_DYNAMIC_LAYERS中提到的类型。

例如:

假设我们正在映射T_DYNAMIC_LAYERS中的第一行。 1)我们将ID列映射到ID属性。 2)我们将URIPath列映射到URIPath到URIPath属性。

这很容易,但是想要的结果就是我希望从第一行得到RasterDynamicLayer的对象,因为行中的类型是1(1等于RasterDynamicLayer)。

可以吗? 如果可以,我该怎么办?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为你需要factory pattern 简单的使用示例:

enum LayerType
{
    Raster,
    Terrain,
    Vector
}

public static ABaseDynamicLayer CreateLayer(LayerType type, int id, string uri)
{
    ABaseDynamicLayer layer;
    switch (type)
    {
        case LayerType.Raster:
            layer = new RasterDynamicLayer();
            break;
        case LayerType.Terrain:
            layer = new TerrainDynamicLayer();
            break;
        case LayerType.Vector:
            layer = new VectorDynamicLayer();
            break;
        default: throw new ArgumentException("Type not supported:" + type.ToString()); 
    }
    layer.LayerID = id;
    layer.URIPath = uri;
    return layer;
}
相关问题