Генерация Json из Ado.Net с родительскими и дочерними отношениями - PullRequest
0 голосов
/ 03 мая 2018

Поскольку мы хороши в разработке хранимых процедур, имеющих объединения и использующих несколько таблиц, и хороших рук в ADO.Net, мы не выбрали EF. Теперь застряли в случае, когда мы ищем потребность в ORM, но все еще пытаемся найти простое решение:

У нас есть одно Сообщение класса и его дочерний класс со списком объектов в виде URL класса. Теперь мы собираемся сгенерировать JSON следующим образом:

{
messegid:1,
messege:’Hello’,
messegeurl:
    [
        {url:’http://example.com/1.jpg’},
        {url:’http://example.com/2.jpg’}
    ]
}

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

public List<T> CreateObject<T>(List<MySqlParameter> parameters, string SPName)
        {
            List<T> t = new List<T>();
            try
            {
                using (MySqlConnection con = new MySqlConnection(connString))
                {
                    using (MySqlCommand cmd = new MySqlCommand(SPName, con))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;

                        foreach (MySqlParameter param in parameters)
                        {
                            cmd.Parameters.Add(param);
                        }

                        con.Open();
                        using (MySqlDataReader reader = cmd.ExecuteReader())
                        {
                            T obj = default(T);
                            while (reader.Read())
                            {
                                obj = Activator.CreateInstance<T>();
                                foreach (PropertyInfo prop in obj.GetType().GetProperties())
                                {
                                    if (prop.PropertyType.Equals(System.Type.GetType("System.String")) || prop.PropertyType.Equals(System.Type.GetType("System.Int32")) || prop.PropertyType.Equals(System.Type.GetType("System.Int64")) || prop.PropertyType.Equals(System.Type.GetType("System.Byte")) || prop.PropertyType.Equals(System.Type.GetType("System.DateTime")) || prop.PropertyType.Equals(System.Type.GetType("System.Boolean")))
                                    {
                                        if (!object.Equals(reader[prop.Name], DBNull.Value))
                                        {
                                            prop.SetValue(obj, reader[prop.Name], null);
                                        }
                                    }
                                }
                                t.Add(obj);
                            }
                            con.Close();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw (ex);
            }
            return t;
        }

Итак, я получу два списка объектов, один для мастера, а другой для родителя, а затем переберу, чтобы добавить объекты дочернего класса в соответствующий родительский класс.

Из этих объектов я получу JSON.

Теперь, насколько я понимаю, в этом подходе есть проблема с производительностью, как если бы у меня было 1000 сообщений и 10 секунд URL, в результате я получу большую часть циклов.

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

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