Как использовать определения, хранящиеся в БД, для определений в вашем исходном коде? - PullRequest
0 голосов
/ 26 апреля 2011

Я хотел бы получить некоторые идеи о том, как использовать определения, которые хранятся в БД (которая используется вашим приложением), в исходный код приложения.

Пример:

База данных

  • Автомобили
  • CarTypeDefinitions

Столбец Cars связан внешним ключом со строкой в ​​CarTypeDefinitions, поэтому определяет тип автомобиля, который содержится в Cars.

Cars содержит записи типа 'Aston Martin DB8' , 'Range Rover' и 'Mercedes Actros' .

CarTypeDefinitions содержит записи типа 'Спортивный автомобиль' , 'SUV' и 'Грузовик' .

Исходный код

Теперь я бы хотел использовать эти определения и в моем исходном коде. Так что каким-то образом нам нужно создать какое-то отображение между строкой в ​​таблице CarTypeDefinitions и (предпочтительно) безопасной для реализации реализацией в исходном коде.

Одна возможная реализация

Первое, что приходит мне в голову (и я особенно ищу другие решения или отзывы по этому вопросу), это создание Enum ECarTypeDefinitions.

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

Теперь, когда у нас есть типобезопасный Enum, мы можем использовать его, например. как это:

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

Содержимое этого перечисления будет автоматически сгенерировано из содержимого таблицы CarTypeDefinitions (добавьте два дополнительных столбца для имени перечисления и его целочисленного значения).

Это также будет работать по-другому, например, сгенерировать содержимое таблицы БД CarTypeDefinitions из ECarTypeDefinitions Enum.

Мне очень хотелось бы узнать о других способах решения этой проблемы. Как вы справились с этим?

1 Ответ

0 голосов
/ 26 апреля 2011

Я делаю это так, как вы предложили. Некоторые другие предпочитают объединять все константы в таблицу «Lookup». Вы можете посмотреть пример некоторых плюсов и минусов здесь: 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);
}

Я не знаком с Entity Framework, поэтому, возможно, у него есть способ, позволяющий делать такие вещи более аккуратно. Также немного ржавый на C #.

...