PersistMore.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Ant.Data;
  6. using System.Data;
  7. using System.Transactions;
  8. using System.Reflection;
  9. using System.Text.RegularExpressions;
  10. using System.Configuration;
  11. using Ant.Frame;
  12. using Ant.ORM;
  13. namespace Ant.ORM
  14. {
  15. /// <summary>
  16. ///多表操作数据持久类
  17. /// <remarks>要求配置Ant.Data配置节</remarks>
  18. /// </summary>
  19. public class PersistMore
  20. {
  21. private static string logfile = ConfigurationManager.AppSettings["DataDynamicsARLic"].ToLower();
  22. public static string ConnectionType = ConfigurationManager.AppSettings["ConnectionType"];//连接方式
  23. //private DataAccess DAO = DataAccessFactory.CreateDataAccess(Config.DefaultDatabaseProperty);
  24. #region 将实体转成SQL语句
  25. #region 插入INTSET方法
  26. /// <summary>
  27. /// 保存实体对象
  28. /// </summary>
  29. /// <param name="entity">实体对象</param>
  30. /// <returns></returns>
  31. public bool SaveEntity(Dictionary<string, EntyTypeData> listtype)
  32. {
  33. DataAccess db = null;
  34. using (TransactionScope soce = new TransactionScope())
  35. {
  36. try
  37. {
  38. QueryCommandBuilders querycommd = new QueryCommandBuilders();
  39. foreach (EntyTypeData mod in listtype.Values)
  40. {
  41. MetaData md = new MetaData();
  42. md.FiledMeta= MetaDataManager.GetMetaData(mod.EntityValue.GetType());//获取实体的元数据
  43. //if ((Object.Equals(db, null)) || (Object.Equals(db, DBNull.Value)))
  44. //{
  45. // db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  46. //}
  47. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//创建不同的SQL语句
  48. qcBuilder.Md = md;//所有实体属性
  49. qcBuilder.PersistType = MetaDataManager.GetEntityType(mod.EntityValue);//操作类型
  50. qcBuilder.QueryComm = qcBuilder.GetQueryCommand();
  51. querycommd.Add(qcBuilder);
  52. }
  53. int num = 0;
  54. foreach (QueryCommandBuilder querymod in querycommd)
  55. {
  56. num = num + db.ExecuteNonQuery(querymod.QueryComm.CommandText, querymod.QueryComm.Parameters);
  57. }
  58. soce.Complete();
  59. return num > 0;
  60. }
  61. catch (Exception ex)
  62. {
  63. return false;
  64. }
  65. }
  66. }
  67. /// <summary>
  68. /// 可以实现不在同一个数据库的事务提交(异步)
  69. /// </summary>
  70. /// <param name="listtype"></param>
  71. /// <returns></returns>
  72. public bool SubmitChanges(Dictionary<string, EntyTypeData> listtype)
  73. {
  74. DataAccess db = null;
  75. using (TransactionScope soce = new TransactionScope())
  76. {
  77. try
  78. {
  79. QueryCommandBuilders querycommd = new QueryCommandBuilders();
  80. foreach (EntyTypeData mod in listtype.Values)
  81. {
  82. MetaData md = new MetaData();
  83. md.FiledMeta = MetaDataManager.GetMetaData(mod.EntityValue.GetType());//获取实体的元数据
  84. //if ((Object.Equals(db, null)) || (Object.Equals(db, DBNull.Value)))
  85. //{
  86. // db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  87. //}
  88. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//创建不同的SQL语句
  89. qcBuilder.Md = md;//所有实体属性
  90. qcBuilder.PersistType = MetaDataManager.GetEntityType(mod.EntityValue);
  91. qcBuilder.QueryComm = qcBuilder.GetQueryCommand();
  92. querycommd.Add(qcBuilder);
  93. }
  94. int num = 0;
  95. foreach (QueryCommandBuilder querymod in querycommd)
  96. {
  97. num = num + db.ExecuteNonQuery(querymod.QueryComm.CommandText, querymod.QueryComm.Parameters);
  98. }
  99. soce.Complete();
  100. return num > 0;
  101. }
  102. catch (Exception ex)
  103. {
  104. return false;
  105. }
  106. }
  107. }
  108. #endregion
  109. #region 删除DELETE方法
  110. public bool DeleteEntity(Dictionary<string, EntyTypeData> listtype)
  111. {
  112. DataAccess db = null;
  113. try
  114. {
  115. QueryCommandBuilders querycommd = new QueryCommandBuilders();
  116. foreach (EntyTypeData entity in listtype.Values)
  117. {
  118. MetaData md = new MetaData();
  119. md.FiledMeta= MetaDataManager.GetMetaData(entity.GetType());
  120. //if ((Object.Equals(db, null)) || (Object.Equals(db, DBNull.Value)))
  121. //{
  122. // db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  123. //}
  124. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//创建不同的SQL语句
  125. qcBuilder.Md = md;//所有实体属性
  126. qcBuilder.EntityType = md.FiledMeta.EntityType;
  127. qcBuilder.PersistType = EntityPersistType.Delete;
  128. //qcBuilder.Fields = MetaDataManager.GetEntityFields(entity);
  129. qcBuilder.QueryComm = qcBuilder.GetQueryCommand();
  130. querycommd.Add(qcBuilder);
  131. }
  132. int num = 0;
  133. foreach (QueryCommandBuilder querymod in querycommd)
  134. {
  135. num = num + db.ExecuteNonQuery(querymod.QueryComm.CommandText, querymod.QueryComm.Parameters);
  136. }
  137. return num > 0;
  138. }
  139. catch (Exception ex)
  140. {
  141. return false;
  142. }
  143. finally
  144. {
  145. db.Close();
  146. db = null;
  147. }
  148. }
  149. #endregion
  150. #endregion
  151. }
  152. }