Есть ли более простой способ сделать запрос из MySQL в ASP.NET MVC? - PullRequest
0 голосов
/ 04 октября 2018

В настоящее время, чтобы запросить мою таблицу пользователей, я должен сделать следующее в моем контроллере:

using (MySqlConnection connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["test_schema"].ConnectionString))
{
    connection.Open();
    MySqlCommand command = new MySqlCommand("SELECT * FROM users", connection);
    MySqlDataReader reader = command.ExecuteReader();

    List<string> users = new List<string>();

    while (reader.Read())
    {
       users.Add(reader["id"] + "\t" + reader["first_name"]);
    }

    ViewBag.users = users;
    reader.Close();
}

Возможно ли в C # поместить результаты в динамический объект, подобный тому, как работает ViewBag?У меня есть некоторый опыт работы с Node.js Express и для написания запроса с использованием модуля sequelize, все, что мне нужно сделать, это написать что-то вроде

Sequelize.query("SELECT * FROM users", { type: sequelize.QueryTypes.SELECT }).then(users => {
    // users attributes will be the columns of the user table
});

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

1 Ответ

0 голосов
/ 04 октября 2018

Это можно сделать очень легко с помощью Dapper .Он поддерживает десериализацию строк данных в обычные классы C # или dynamic объекты.

using (MySqlConnection connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["test_schema"].ConnectionString))
{
    // the 'Query' method is provided by Dapper
    var users = connection.Query("SELECT id, first_name FROM users");
    // each object in 'users' will have .id and .first_name properties
    ViewBag.users = users;


    // to duplicate your sample code's behaviour of creating strings:
    var users = connection.Query("SELECT id, first_name FROM users")
        .Select(x => string.Concat(x.id, "\t", x.first_name))
        .ToList();
}

Кроме того, вы можете десериализовать в уже определенный тип:

class User
{
    public string Id { get; set; }
    public string FirstName { get; set; }
}

// here I use 'as FirstName' to change the retrieved column name so I
// can use "normal" C# property names on my User class
var users = connection.Query<User>("select id, first_name as FirstName from users");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...