Поскольку мы хороши в разработке хранимых процедур, имеющих объединения и использующих несколько таблиц, и хороших рук в 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 и что-то вроде этого.