gpt4 book ai didi

c# - 映射父亲枚举时生成子对象(Fluent Nhibernate)

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:42 24 4
gpt4 key购买 nike

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

我的项目中有 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)。

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

感谢您的帮助!

最佳答案

我想你需要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;
}

关于c# - 映射父亲枚举时生成子对象(Fluent Nhibernate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12937874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com