【问题标题】:How to use definitions stored in a DB to definitions in your source code?如何将存储在数据库中的定义用于源代码中的定义?
【发布时间】:2011-08-12 22:37:55
【问题描述】:

我想了解如何将存储在数据库(由您的应用程序使用)中的定义用于应用程序的源代码。

例子:

数据库

  • 汽车
  • 汽车类型定义

Cars 列通过外键链接到CarTypeDefinitions 中的一行,因此定义了Cars 中包含的汽车类型。

Cars 包含 'Aston Martin DB8''Range Rover''Mercedes Actros' 等条目。

CarTypeDefinitions 包含 'Sports car''SUV''Truck' 等条目。

源代码

现在我希望能够在我的源代码中使用这些定义。因此,不知何故,我们需要在CarTypeDefinitions 表中的一行和源代码中的(最好)类型安全的实现之间创建某种映射。

一种可能的实现方式

我想到的第一件事(我特别在寻找其他解决方案或对此的反馈)是创建一个EnumECarTypeDefinitions

public enum ECarTypeDefinitions
{
    SportsCar = 1,
    SUV = 2,
    Truck = 3
}

现在我们有了一个类型安全的Enum,我们可以使用它,例如像这样:

public bool IsSportsCar(Car currentCar)
{
    return (currentCar.CarType == ECarTypeDefinitions.SportsCar);
}

该枚举的内容将根据CarTypeDefinitions 表的内容自动生成(为枚举的名称及其整数值添加两个额外的列)。

这也适用于其他方式,例如从ECarTypeDefinitionsEnum 生成CarTypeDefinitions DB 表的内容。

我很想知道如何解决这个问题的其他方法。你是怎么处理的?

【问题讨论】:

  • 您所描述的本质上是object relational mapping。我建议从提供的链接开始,然后深入挖掘,最终找出您想要使用哪种 ORM 和您选择的语言。
  • 感谢您的指点。我们已经在应用程序开发中使用带有 C# 的 Entity Framework 4.0。虽然 EF 生成对象供我们使用(例如 CarTypeDefinition),但我们仍然需要某种映射,或者您如何知道 CarTypeDefinition 对象的特定实例描述了一辆跑车?

标签: database enums definition


【解决方案1】:

我按照你建议的方式做。其他一些人更喜欢将所有常量组合成一个“查找”表。您可以在这里查看一些优缺点的示例:http://weblogs.foxite.com/andykramek/archive/2009/05/10/8419.aspx

编辑:这里的想法可能有助于激发您的更多想法。

为每种汽车类型创建一个类:

public class SportsCarType
{
}

现在向 CarTypeDefinition 添加一个属性:

public class CarTypeDefinition
{
    ...
    public string typeName;
}

使用 typeof 填充新属性(对于您拥有的每种类型):

...
carTypeDefinition.typeName = typeof(SportsCarType).Name;
...

最后是你的新 IsSportsCar 方法:

public bool IsSportsCar(Car currentCar)
{
    return (currentCar.CarType.typeName == typeof(SportsCarType).Name);
}

我不熟悉实体框架,所以也许它有办法让这种事情更干净地完成。在 C# 上也有点生疏。

【讨论】:

  • 我想知道是否有办法在没有枚举的情况下做到这一点?我刚刚和一位同事讨论过这个问题,我们无法就这个问题得出结论。
猜你喜欢
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 2012-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多