由于我们擅长开发具有连接和使用多个表的存储过程,并且擅长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存储过程直接生成的方法。
暂无答案!
目前还没有任何答案,快来回答吧!