/ORMFramework2/Core/Connection/ORMSession.cs

https://bitbucket.org/mrajoelisolo/ormframework-mkii-core · C# · 283 lines · 214 code · 66 blank · 3 comment · 18 complexity · 9d0c6b46ebb48a8880d11b3f4a6817d4 MD5 · raw file

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using ORMFramework2.Core.Schemas.Config;
  5. using ORMFramework2.Core.Schemas.Mapping;
  6. using ORMFramework2.Core.Libraries;
  7. namespace ORMFramework2.Core.Connection
  8. {
  9. public class ORMSession
  10. {
  11. private ORMConfig m_Config;
  12. private List<ORMEntity> m_Entities;
  13. private int m_MaxResults = -1;
  14. private int m_FirstResult = -1;
  15. public ORMSession(ORMConfig config)
  16. {
  17. m_Config = config;
  18. m_Entities = ORMSchemaBrowser.Instance.GetEntities(config);
  19. }
  20. public List<Object> CreateQuery(Type entityType)
  21. {
  22. return CreateQuery(entityType, "", null);
  23. }
  24. public List<Object> CreateQuery(Type entityType, string where)
  25. {
  26. return CreateQuery(entityType, where, null);
  27. }
  28. public List<Object> CreateQuery(Type entityType, string where, List<ORMParameter> parameters)
  29. {
  30. return CreateQuery(entityType, where, parameters, "");
  31. }
  32. public List<Object> CreateQuery(Type entityType, string where, List<ORMParameter> parameters, string orderBy)
  33. {
  34. List<Object> res = new List<Object>();
  35. ORMEntity entity = ORMSchemaBrowser.Instance.GetEntitySchema(m_Entities, entityType);
  36. IDBConnection cnx = ORMConnectionFactory.Instance.GetConnection(m_Config);
  37. ORMCommand cmd = cnx.CreateCommand();
  38. string szWhere = "";
  39. //Setting commmand parameters
  40. cmd.MaxResults = this.m_MaxResults;
  41. cmd.FirstResult = this.m_FirstResult;
  42. //End setting parameters
  43. if (parameters != null)
  44. foreach (ORMParameter parameter in parameters)
  45. cmd.AddParameter(parameter.ParameterName, parameter.Value);
  46. if (!String.IsNullOrEmpty(where))
  47. szWhere += " WHERE " + where;
  48. if (!String.IsNullOrEmpty(orderBy))
  49. szWhere += " ORDER BY " + orderBy;
  50. cmd.CommandText = "SELECT * FROM " + entity.TableName + szWhere + ";";
  51. cnx.Open();
  52. try
  53. {
  54. ORMDataReader reader = cmd.ExecuteReader();
  55. int iStart = 0;
  56. int iCount = 0;
  57. while (reader.Read())
  58. {
  59. if (cmd.FirstResult != -1)
  60. if (iStart < cmd.FirstResult)
  61. {
  62. iStart++;
  63. continue;
  64. }
  65. if(cmd.MaxResults != -1)
  66. if (iCount >= cmd.MaxResults) break;
  67. Object o = Reflector.Instance.CreateInstance(entityType); // t -> entityType
  68. if (entity.IdField != null)
  69. Reflector.Instance.SetPropertyValue(entity.IdField.FieldName, o, reader.GetValue(entity.IdField.ColName));
  70. foreach (ORMEntityField field in entity.Fields)
  71. {
  72. Reflector.Instance.SetPropertyValue(field.FieldName, o, reader.GetValue(field.ColName));
  73. }
  74. res.Add(o);
  75. iCount++;
  76. }
  77. }
  78. catch (Exception ex)
  79. {
  80. System.Console.WriteLine(ex.Message);
  81. }
  82. cnx.Close();
  83. return res;
  84. }
  85. public void Save(Object o)
  86. {
  87. IDBConnection cnx = ORMConnectionFactory.Instance.GetConnection(m_Config);
  88. try
  89. {
  90. cnx.Open();
  91. ORMCommand cmd = cnx.CreateCommand();
  92. ORMEntity entity = ORMSchemaBrowser.Instance.GetEntitySchema(m_Entities, o.GetType());
  93. String query = "INSERT INTO " + entity.TableName;
  94. foreach (ORMEntityField fe in entity.Fields)
  95. {
  96. Object val = Reflector.Instance.GetPropertyValue(fe.FieldName, o);
  97. cmd.AddParameter(fe.ColName, val);
  98. }
  99. List<ORMParameter> parameters = cmd.GetParameters();
  100. int i = 0;
  101. query += "(";
  102. foreach (ORMParameter field in parameters)
  103. {
  104. query += field.ParameterName;
  105. if (i++ < parameters.Count - 1)
  106. query += ", ";
  107. }
  108. query += ") ";
  109. i = 0;
  110. query += "values (";
  111. foreach (ORMParameter field in parameters)
  112. {
  113. query += "@" + field.ParameterName;
  114. if (i++ < parameters.Count - 1)
  115. query += ", ";
  116. }
  117. query += ");";
  118. cmd.CommandText = query;
  119. cmd.ExecuteNonQuery();
  120. //On définit le pk une fois que l'entité est persisté, incompatible avec SqlCommand
  121. if (entity.IdField != null)
  122. Reflector.Instance.SetPropertyValue(entity.IdField.FieldName, o, (Object)cmd.LastInsertedId);
  123. }
  124. catch (Exception ex)
  125. {
  126. System.Console.WriteLine(ex.Message);
  127. }
  128. cnx.Close();
  129. }
  130. public void Update(Object o)
  131. {
  132. IDBConnection cnx = ORMConnectionFactory.Instance.GetConnection(m_Config);
  133. try
  134. {
  135. cnx.Open();
  136. ORMCommand cmd = cnx.CreateCommand();
  137. ORMEntity entity = ORMSchemaBrowser.Instance.GetEntitySchema(m_Entities, o.GetType());
  138. String query = "UPDATE " + entity.TableName + " SET ";
  139. List<ORMParameter> parameters = new List<ORMParameter>();
  140. foreach (ORMEntityField field in entity.Fields)
  141. {
  142. Object val = Reflector.Instance.GetPropertyValue(field.FieldName, o);
  143. ORMParameter parameter = new ORMParameter(field.ColName, val);
  144. parameters.Add(parameter);
  145. cmd.AddParameter(parameter.ParameterName, parameter.Value);
  146. }
  147. int i = 0;
  148. query += "";
  149. foreach (ORMParameter parameter in parameters)
  150. {
  151. query += parameter.ParameterName + " = @" + parameter.ParameterName;
  152. if (i++ < parameters.Count - 1)
  153. query += ", ";
  154. }
  155. Object pkVal = Reflector.Instance.GetPropertyValue(entity.IdField.FieldName, o);
  156. query += " WHERE " + entity.IdField.ColName + " = '" + pkVal + "';";
  157. cmd.CommandText = query;
  158. cmd.ExecuteNonQuery();
  159. }
  160. catch (Exception ex)
  161. {
  162. System.Console.WriteLine(ex.Message);
  163. }
  164. cnx.Close();
  165. }
  166. public void Delete(Object o)
  167. {
  168. IDBConnection cnx = ORMConnectionFactory.Instance.GetConnection(m_Config);
  169. try
  170. {
  171. cnx.Open();
  172. ORMCommand cmd = cnx.CreateCommand();
  173. ORMEntity entity = ORMSchemaBrowser.Instance.GetEntitySchema(m_Entities, o.GetType());
  174. String query = "DELETE FROM " + entity.TableName + " WHERE ";
  175. Object val = Reflector.Instance.GetPropertyValue(entity.IdField.FieldName, o);
  176. ORMParameter parameter = new ORMParameter(entity.IdField.ColName, val);
  177. cmd.AddParameter(parameter.ParameterName, parameter.Value);
  178. query += entity.IdField.ColName + " = @" + entity.IdField.ColName;
  179. cmd.CommandText = query;
  180. cmd.ExecuteNonQuery();
  181. }
  182. catch (Exception ex)
  183. {
  184. System.Console.WriteLine(ex.Message);
  185. }
  186. cnx.Close();
  187. }
  188. public List<Object> ExecuteNonQuery(string query)
  189. {
  190. List<Object> res = new List<Object>();
  191. IDBConnection cnx = ORMConnectionFactory.Instance.GetConnection(m_Config);
  192. try
  193. {
  194. cnx.Open();
  195. ORMCommand cmd = cnx.CreateCommand();
  196. cmd.CommandText = query;
  197. cmd.ExecuteNonQuery();
  198. }
  199. catch (Exception ex)
  200. {
  201. System.Console.WriteLine(ex.Message);
  202. }
  203. cnx.Close();
  204. return res;
  205. }
  206. public int MaxResults
  207. {
  208. get { return m_MaxResults; }
  209. set { m_MaxResults = value; }
  210. }
  211. public int FirstResult
  212. {
  213. get { return m_FirstResult; }
  214. set { m_FirstResult = value; }
  215. }
  216. }
  217. }