Can Enums в C # можно использовать для замены таблиц Lookup (например, SportType, MatchType) - PullRequest
1 голос
/ 03 марта 2012

У меня есть какая-то таблица в базе данных. Если взять только две

1-Sports
2-Match<>
.......
In sports table there is columns SportType<br>
and In Match table there is column MatchType

Вариант 1:
У меня есть возможность создать SportType и MatchType Table

Вариант 2:
и второй вариант - создать списки SportType и MatchType

Некоторые люди не предпочитают вариант 1 из-за дополнительных объединений в запросе
Что вы предлагаете

Мне также нужно показать SportType & MatchType в DropDownLists

Ответы [ 2 ]

1 голос
/ 03 марта 2012

Я думаю, что проблема с подходом enum заключается в том, что вам нужно добавить новые SportTypes и MatchTypes.Если ваши выпадающие списки привязаны к этим Enums, вам придется заново развертывать каждый раз, когда они меняются

1 голос
/ 03 марта 2012

При выборе между справочными таблицами и перечислениями или аналогичными константами в коде необходимо учитывать несколько факторов. Основным среди этих факторов является вопрос о том, насколько вероятно, что вам придется добавить или изменить любое из этих значений без повторного развертывания приложения.

Еще одна вещь, которую нужно иметь в виду, что если вы используете значения в коде, вы, скорее всего, не будете использовать какой-либо суррогатный ключ, поэтому, если вы когда-нибудь решили изменить написание чего-либо в своем коде, вы можете создать проблема с несовпадающими данными в базе данных.

Поскольку вам также необходимо отображать эти типы в раскрывающихся списках, я не советую использовать пустые перечисления, так как становится неприлично отображать версии, удобные для пользовательского интерфейса (например, с пробелами между словами).

Самая простая альтернатива - это класс со строковыми константами:

public class SportType
{
    public const string TeamSport = "Team Sport";
    public const string IndividualSport = "IndividualSport";
}

Более сложный вариант, но, возможно, ненужный для этого варианта использования, состоит в том, чтобы сделать эти объекты строго типизированными:

public class SportType
{
    private readonly string _description;

    private SportType(string description)
    {
        _description = description;
    }

    public static readonly SportType TeamSport = new SportType("Team Sport");
    public static readonly SportType IndividualSport = new SportType("Individual Sport");

    public static implicit operator SportType(string s)
    {
        return new SportType(s);
    }

    public static implicit operator string(SportType s)
    {
        return s._description;
    }

    // equality overrides etc.
}

Преимущество здесь в том, что вы можете использовать эти значения в качестве строк

string sportType = SportType.TeamSport;

но вам не нужно объявлять переменные и параметры как пустые строки:

public void SetFavoriteSportType(SportType sportType)

Опять же, это всего лишь варианты; в конечном итоге все зависит от того, как будет развернуто ваше приложение, и от того, как эти данные будут изменены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...