При выборе между справочными таблицами и перечислениями или аналогичными константами в коде необходимо учитывать несколько факторов. Основным среди этих факторов является вопрос о том, насколько вероятно, что вам придется добавить или изменить любое из этих значений без повторного развертывания приложения.
Еще одна вещь, которую нужно иметь в виду, что если вы используете значения в коде, вы, скорее всего, не будете использовать какой-либо суррогатный ключ, поэтому, если вы когда-нибудь решили изменить написание чего-либо в своем коде, вы можете создать проблема с несовпадающими данными в базе данных.
Поскольку вам также необходимо отображать эти типы в раскрывающихся списках, я не советую использовать пустые перечисления, так как становится неприлично отображать версии, удобные для пользовательского интерфейса (например, с пробелами между словами).
Самая простая альтернатива - это класс со строковыми константами:
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)
Опять же, это всего лишь варианты; в конечном итоге все зависит от того, как будет развернуто ваше приложение, и от того, как эти данные будут изменены.