由于我们擅长开发在ADO.Net上加入和使用多个表并且好手的存储过程,我们没有选择EF。现在陷入了我们正在寻找ORM需求但仍试图找到简单解决方案的情况:
我们有一个Class Message及其子类,其对象列表为Class 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;
}
因此,我将得到两个对象列表,一个用于master,另一个用于parent,然后循环以将子类的对象添加到相关的父类。
从这些物体中我会得到json。
现在,到目前为止,我理解这种方法存在性能问题,好像我有1000条消息和10条URL我最终会有大量的循环。
请您建议直接从Mysql存储过程生成并对此进行排序。