Преобразование типа данных Enum в строку - PullRequest
0 голосов
/ 18 ноября 2018

Как преобразовать тип данных enum из int в строку?

Вот мой код ниже

public class Users_Accounts
{
    [Key]
    public int AccountID { get; set; }
    public Guid UniqueID { get; set; }

    [EnumDataType(typeof(string), ErrorMessage = "{0} Opps")]
    public Title Title { get; set; }
    public string First_Name { get; set; }
    public string Last_Name { get; set; }
}

а вот мое Title перечисление:

public enum Title
{
    Mr, Mrs, Miss, Chief 
}

Я получаю ошибку

InvalidCastException: невозможно привести объект типа 'System.String' к типу 'System.Int32'.

Я знаю, что перечисления строго типизированы и имеют значение int, а в моей базе данных это nvarchar(20)

Как мне конвертировать?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Я также нашел это онлайн, и хотя его MVC 5 меняет View.Bag на View ["Data"], он работает

https://www.c -sharpcorner.com / article / different-way-связывать-на-значение-для-бритва DropDownList-в-Сеть САШ-mvc5 /

0 голосов
/ 19 ноября 2018

Я приведу вам пример, который вы можете попробовать, но это просто быстрое решение , поскольку вы не проектировали структуру базы данных.

Элемент перечисления:

public enum Title
{
    Mr, 
    Mrs, 
    Miss, 
    Chief 
}

По умолчанию Title.Mr должно иметь значение по умолчанию 0, Mrs имеет значение 1 ..., то же самое, что и остальные.

Если в перечислении 256 элементов или меньше, вы можете попробовать:

public enum Title : byte
{
    Mr = 0, 
    Mrs = 1, 
    Miss = 2, 
    Chief = 3
}

Title.Mr все еще имеет значение 0.

Сущность:

public class Users_Accounts
{
    [Key]
    public int AccountID { get; set; }
    public Guid UniqueID { get; set; }

    //You can change the returned type of `Title` property from `Title` to `string` here
    public string Title { get; set; }
    public string First_Name { get; set; }
    public string Last_Name { get; set; }
}

Модель:

public class AddUserViewModel
{
    public Title Title { get; set; }
    public string First_Name { get; set; }
    public string Last_Name { get; set; }
}

При обновлении в базу данных вам необходимо преобразовать enum в строку:

public IActionResult AddUser(AddUserViewModel model)
{
    // title contains value like: 0, 1, 2... as string
    string title = ((int)model.Title).ToString();

    var user = new Users_Accounts
    {
        AccountID = ...
        UniqueID = ...
        Title = title,
        First_Name = model.First_Name,
        Last_Name = model.Last_Name
    };

    _dbContext.UserAccounts.Add(user);

    _dbContext.SaveChanges();
}

Когда вы получите пользователя, вы можете преобразовать Title как строку в enum:

var user = _dbContext.UserAccounts.SingleOrDefault(x => x.AccountID == 1);
Title userTitle = (Title)Convert.ToInt32(user.Title);

userTitle вернется Title.Mr или Title.Mrs ...

ПРИМЕЧАНИЕ: Если вы решите использовать

public enum Title : byte {}

Вам необходимовместо Convert.ToInt32 вместо Convert.ToByte.

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