EnBaseObj.cs 53 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Ant.Frame;
  6. using Ant.Data;
  7. using System.Data;
  8. using System.Configuration;
  9. using System.Reflection;
  10. using Ant.Common;
  11. using Newtonsoft.Json;
  12. using Ant.Descriptors;
  13. using Ant.Entity;
  14. namespace Ant.ORM
  15. {
  16. /// <summary>
  17. /// 实体基类
  18. /// </summary>
  19. [Serializable]
  20. public abstract class EnBaseObj<T> : EntityObject<T> where T : EntityObject<T>, new()
  21. {
  22. #region 获取单个实体
  23. /// <summary>
  24. /// 获取单个实体
  25. /// </summary>
  26. /// <param name="entity">查询条件</param>
  27. /// <returns>返回的是Object类型返回去要进行转换</returns>
  28. public override ResponseModel GetEntity(RequestModel request)
  29. {
  30. return GetEntityEnd(request);
  31. }
  32. #endregion
  33. #region 保存数据
  34. /// <summary>
  35. /// 保存数据
  36. /// </summary>
  37. /// <returns></returns>
  38. public override ResponseModel Save()
  39. {
  40. return SaveEnd(null);
  41. }
  42. /// <summary>
  43. /// 保存数据
  44. /// </summary>
  45. /// <param name="db">数据库对象参数</param>
  46. /// <returns></returns>
  47. public override ResponseModel Save(DataAccess db)
  48. {
  49. return SaveEnd(db);
  50. }
  51. #endregion
  52. #region 删除数据
  53. /// <summary>
  54. /// 删除
  55. /// </summary>
  56. /// <returns></returns>
  57. public override ResponseModel Delete()
  58. {
  59. return DeleteEnd("", null);
  60. }
  61. /// <summary>
  62. ///
  63. /// </summary>
  64. /// <param name="db"></param>
  65. /// <returns></returns>
  66. public override ResponseModel Delete(DataAccess db)
  67. {
  68. return DeleteEnd("", db);
  69. }
  70. /// <summary>
  71. /// 通过oid删除记录
  72. /// </summary>
  73. /// <param name="oid"></param>
  74. /// <returns></returns>
  75. public override ResponseModel Delete(string oid)
  76. {
  77. return DeleteEnd(oid, null);
  78. }
  79. /// <summary>
  80. ///
  81. /// </summary>
  82. /// <param name="oid"></param>
  83. /// <param name="db"></param>
  84. /// <returns></returns>
  85. public override ResponseModel Delete(string oid, DataAccess db)
  86. {
  87. return DeleteEnd(oid, db);
  88. }
  89. #endregion
  90. #region 更新数据集
  91. /// <summary>
  92. /// 更新自带Where条件的数据
  93. /// </summary>
  94. /// <param name="entity">更新的数据</param>
  95. /// <param name="filter">更新的条件</param>
  96. /// <param name="db">连接数据库对象</param>
  97. /// <returns></returns>
  98. public override ResponseModel UpdateEntity(ResquestUpdateModel enty)
  99. {
  100. return UpdateEntityEnd(enty);
  101. }
  102. #endregion
  103. #region 获取数据集
  104. /// <summary>
  105. /// 获取DataTable
  106. /// </summary>
  107. /// <param name="showfield"></param>
  108. /// <param name="db"></param>
  109. /// <returns></returns>
  110. public override ResponseModel GetDtList(RequestModel enty)
  111. {
  112. return GetDtListEnd(enty);
  113. }
  114. /// <summary>
  115. /// 由DataReader转DataTable
  116. /// </summary>
  117. /// <param name="enty"></param>
  118. /// <returns></returns>
  119. public override ResponseModel GetDr2DtList(RequestModel enty)
  120. {
  121. return GetDr2DtListEnd(enty);
  122. }
  123. /// <summary>
  124. /// 通过DataReader返回List集合这种效率高
  125. /// </summary>
  126. /// <param name="showfield">显示字段</param>
  127. /// <param name="db">数据对象</param>
  128. /// <returns>返回Object类型的数据</returns>
  129. public override ResponseModel GetDr2EnList(RequestModel enty)
  130. {
  131. return GetDr2EnListEnd(enty);
  132. }
  133. /// <summary>
  134. /// 查询DataTable转换成实体效率不高(要求性不高的情况下使用)
  135. /// </summary>
  136. /// <param name="db"></param>
  137. /// <returns></returns>
  138. public override ResponseModel GetDt2EnList(RequestModel enty)
  139. {
  140. return GetDt2EnListEnd(enty);
  141. }
  142. /// <summary>
  143. /// 获取分页方法
  144. /// </summary>
  145. /// <param name="enty"></param>
  146. /// <returns></returns>
  147. public override ResponseModel GetPageRecordList(RequestModel enty)
  148. {
  149. return GetPageRecordListEnd(enty);
  150. }
  151. /// <summary>
  152. /// 获取分页数据返回DataTable
  153. /// </summary>
  154. /// <param name="startNum"></param>
  155. /// <param name="pageSize"></param>
  156. /// <returns></returns>
  157. public override ResponseModel GetPageRecordDt(RequestModel enty)
  158. {
  159. return GetPageRecordDtEnd(enty);
  160. }
  161. /// <summary>
  162. /// 数据的总记录
  163. /// </summary>
  164. /// <returns></returns>
  165. public override ResponseModel Sum()
  166. {
  167. return SumEnd();
  168. }
  169. #endregion
  170. #region 最终调用方法
  171. #region 获取分页数据最终方法
  172. /// <summary>
  173. /// 获取分页数据返回实体集合
  174. /// </summary>
  175. /// <param name="request"></param>
  176. /// <returns></returns>
  177. private ResponseModel GetPageRecordListEnd(RequestModel request)
  178. {
  179. var result = new ResponseModel(); QueryCommand cmd = new QueryCommand();
  180. var db = request.db;
  181. try
  182. {
  183. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  184. sw.Start();
  185. //QueryCommandBuilders querycommd = new QueryCommandBuilders();
  186. MetaData md = MetaDataManager.GetMetaData(this);//获取实体的元数据
  187. //if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  188. if (db.IsNull())
  189. {
  190. result.IsSuccess = false;
  191. result.Message = "数据库配置不正确";
  192. return result;
  193. }
  194. if (request.newSt.IsNull())
  195. {
  196. result.IsSuccess = false;
  197. result.Message = "备注信息不能为空";
  198. return result;
  199. }
  200. else
  201. {
  202. if (request.newSt.NewSt.IsNull())
  203. {
  204. result.IsSuccess = false;
  205. result.Message = "备注信息不能为空";
  206. return result;
  207. }
  208. }
  209. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  210. qcBuilder.Md = md;//实体属性
  211. qcBuilder.PersistType = EntityPersistType.QueryPage;//操作方式
  212. qcBuilder.PageNo = request.StartNum;
  213. qcBuilder.PageSize = request.PageSize;
  214. //qcBuilder.SelectField = enty.SelectField;
  215. qcBuilder.ShowField = request.ShowField;
  216. qcBuilder.Predicate = request.Predicate;
  217. cmd = qcBuilder.GetQueryCommand();
  218. System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
  219. string sqlWithComment = string.Empty;
  220. if (sfs.Count() > 0)
  221. {
  222. System.Diagnostics.StackFrame infos = sfs[0];
  223. System.Reflection.MethodBase mb = infos.GetMethod();
  224. var filename = infos.GetFileName();
  225. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  226. }
  227. var dt = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters);
  228. var objlist = DataToModel.Dr2EnList<T>(dt);
  229. sw.Stop();
  230. string str = sw.Elapsed.ToString();
  231. result.IsSuccess = true;
  232. result.ResultModel = objlist;
  233. result.RecordNum = PageSumEnd(md).RecordNum;
  234. result.Message = "查询成功,用时:" + str;
  235. return result;
  236. }
  237. catch (Exception ex)
  238. {
  239. //LogHelper.WriteExLog(ex);
  240. result.IsSuccess = false;
  241. result.Message = ex.ToString();
  242. cmd = new QueryCommand();
  243. return result;
  244. }
  245. finally
  246. {
  247. result.StrSql = cmd.SqlString;
  248. result.DBConfig = db.ConnectionString;
  249. if (!db.IsNull()) db.Close();
  250. }
  251. }
  252. /// <summary>
  253. /// 获取分页数据
  254. /// </summary>
  255. /// <param name="startNum"></param>
  256. /// <param name="pageSize"></param>
  257. /// <returns></returns>
  258. //private ResponseTable GetPageRecordDtEnd(string showfield, int startNum, int pageSize)
  259. private ResponseModel GetPageRecordDtEnd(RequestModel enty)
  260. {
  261. DataAccess db = enty.db; QueryCommand cmd = new QueryCommand();
  262. ResponseModel result = new ResponseModel();
  263. try
  264. {
  265. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  266. sw.Start();
  267. MetaData md = MetaDataManager.GetMetaData(this);//获取实体的元数据
  268. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
  269. if (db.IsNull())
  270. {
  271. result.IsSuccess = false;
  272. result.Message = "数据库配置不正确";
  273. return result;
  274. }
  275. if (enty.newSt.IsNull())
  276. {
  277. result.IsSuccess = false;
  278. result.Message = "备注信息不能为空";
  279. return result;
  280. }
  281. else
  282. {
  283. if (enty.newSt.NewSt.IsNull())
  284. {
  285. result.IsSuccess = false;
  286. result.Message = "备注信息不能为空";
  287. return result;
  288. }
  289. }
  290. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  291. qcBuilder.Md = md;//实体属性
  292. qcBuilder.PersistType = EntityPersistType.QueryPage;//操作方式
  293. qcBuilder.PageNo = enty.StartNum;
  294. qcBuilder.PageSize = enty.PageSize;
  295. //qcBuilder.SelectField = enty.SelectField;
  296. qcBuilder.ShowField = enty.ShowField;
  297. cmd = qcBuilder.GetQueryCommand();
  298. System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames();
  299. string sqlWithComment = string.Empty;
  300. if (sfs.Count() > 0)
  301. {
  302. System.Diagnostics.StackFrame infos = sfs[0];
  303. System.Reflection.MethodBase mb = infos.GetMethod();
  304. var filename = infos.GetFileName();
  305. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  306. }
  307. DataTable dt = db.ExecuteDataTable(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters);
  308. sw.Stop();
  309. string str = sw.Elapsed.ToString();
  310. result.IsSuccess = dt.Rows.Count > 0;
  311. result.RecordNum = PageSumEnd(md).RecordNum;
  312. result.DataTable = dt;
  313. result.Message = "查询返回成功,用时:" + str;
  314. return result;
  315. }
  316. catch (Exception ex)
  317. {
  318. //LogHelper.WriteExLog(ex);
  319. result.IsSuccess = false;
  320. result.Message = ex.ToString();
  321. return result;
  322. }
  323. finally
  324. {
  325. result.StrSql = cmd.SqlString;
  326. result.DBConfig = db.ConnectionString;
  327. if (!db.IsNull()) db.Close();
  328. }
  329. }
  330. /// <summary>
  331. /// 带分页的统计记录
  332. /// </summary>
  333. /// <param name="md"></param>
  334. /// <returns></returns>
  335. private ResponseModel PageSumEnd(MetaData md)
  336. {
  337. DataAccess db = null; ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand();
  338. try
  339. {
  340. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  341. if (db.IsNull())
  342. {
  343. result.IsSuccess = false;
  344. result.Message = "数据库配置不正确";
  345. return result;
  346. }
  347. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  348. qcBuilder.Md = md;
  349. qcBuilder.PersistType = EntityPersistType.Sum;
  350. cmd = qcBuilder.GetQueryCommand();
  351. var num = db.ExecuteScalar(cmd.CommandText, cmd.Parameters).ToInt32();
  352. result.RecordNum = num;
  353. result.IsSuccess = true;
  354. result.Message = "返回成功";
  355. }
  356. catch (Exception ex)
  357. {
  358. //LogHelper.WriteExLog(ex);
  359. result.IsSuccess = false;
  360. result.Message = ex.ToString();
  361. }
  362. finally
  363. {
  364. result.StrSql = cmd.SqlString;
  365. result.DBConfig = db.ConnectionString;
  366. if (!db.IsNull()) db.Close();
  367. }
  368. return result;
  369. }
  370. /// <summary>
  371. /// 数据的总记录
  372. /// </summary>
  373. /// <returns></returns>
  374. private ResponseModel SumEnd()
  375. {
  376. DataAccess db = null; ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand();
  377. try
  378. {
  379. //QueryCommandBuilders querycommd = new QueryCommandBuilders();
  380. MetaData md = MetaDataManager.GetMetaData(this);//获取实体的元数据
  381. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  382. if (db.IsNull())
  383. {
  384. result.IsSuccess = false;
  385. result.Message = "数据库配置不正确";
  386. return result;
  387. }
  388. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  389. qcBuilder.Md = md;
  390. qcBuilder.PersistType = EntityPersistType.Sum;
  391. cmd = qcBuilder.GetQueryCommand();
  392. var num = db.ExecuteScalar(cmd.CommandText, cmd.Parameters).ToInt32();
  393. result.RecordNum = num;
  394. result.IsSuccess = true;
  395. result.Message = "返回成功";
  396. }
  397. catch (Exception ex)
  398. {
  399. //LogHelper.WriteExLog(ex);
  400. result.IsSuccess = false;
  401. result.Message = ex.ToString();
  402. }
  403. finally
  404. {
  405. result.StrSql = cmd.SqlString;
  406. result.DBConfig = db.ConnectionString;
  407. if (!db.IsNull()) db.Close();
  408. }
  409. return result;
  410. }
  411. #endregion
  412. /// <summary>
  413. /// 获取单个实体最终方法
  414. /// </summary>
  415. /// <param name="oid"></param>
  416. /// <param name="showfield"></param>
  417. /// <param name="db"></param>
  418. /// <returns></returns>
  419. private ResponseModel GetEntityEnd(RequestModel enty)
  420. {
  421. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  422. sw.Start();
  423. T obj = Activator.CreateInstance<T>(); DataAccess db = enty.db;
  424. var result = new ResponseModel(); TypeDescriptor md = null;
  425. QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
  426. try
  427. {
  428. md = TypeDescriptor.ParserMeta(this); //获取实体的元数据
  429. if (md.Fields.Count == 0 && enty.Predicate.IsNull())//主键和查询类都没有赋值这样就不能做这种查询
  430. {
  431. result.Message = "所有查询条件都没有,不能查询";
  432. result.IsSuccess = false;
  433. return result;
  434. }
  435. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
  436. if (db.IsNull())
  437. {
  438. result.IsSuccess = false;
  439. result.Message = "数据库配置不正确";
  440. return result;
  441. }
  442. if (enty.newSt.IsNull())
  443. {
  444. result.IsSuccess = false;
  445. result.Message = "备注信息不能为空";
  446. return result;
  447. }
  448. else
  449. {
  450. if (enty.newSt.NewSt.IsNull())
  451. {
  452. result.IsSuccess = false;
  453. result.Message = "备注信息不能为空";
  454. return result;
  455. }
  456. }
  457. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType); //构建生成哪种SQL语句
  458. qcBuilder.Md = md;
  459. qcBuilder.PersistType = EntityPersistType.Query;
  460. qcBuilder.Predicate = enty.Predicate;
  461. qcBuilder.Top = "1";
  462. qcBuilder.SqlType = SqlEnum.MainSql;
  463. qcBuilder.Sort = enty.Sort;
  464. cmd = qcBuilder.GetQueryCommand(); //生成SQL语句和参数
  465. System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames();
  466. if (sfs.Count() > 0)
  467. {
  468. System.Diagnostics.StackFrame infos = sfs[0];
  469. System.Reflection.MethodBase mb = infos.GetMethod();
  470. var filename = infos.GetFileName();
  471. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  472. }
  473. using (IDataReader rdr = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters))
  474. {
  475. obj = DataToModel.Dr2En<T>(rdr);
  476. }
  477. sw.Stop();
  478. string str = sw.Elapsed.ToString();
  479. result.IsSuccess = obj.IfNotNull();
  480. result.ResultModel = obj;
  481. result.Message = "获取实体成功,用时:" + str;
  482. return result;
  483. }
  484. catch (Exception ex)
  485. {
  486. //LogHelper.WriteExLog(ex);
  487. result.IsSuccess = false;
  488. result.Message = ex.ToString();
  489. return result;
  490. }
  491. finally
  492. {
  493. string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment);
  494. result.StrSql = showsqlstr;
  495. result.DBConfig = db.ConnectionString;
  496. if (!db.IsNull()) db.Close();
  497. }
  498. }
  499. /// <summary>
  500. /// 判断数据库中是否有值
  501. /// </summary>
  502. /// <param name="comText">执行的sql查询</param>
  503. /// <returns></returns>
  504. public bool GetDataHasRows(string comText)
  505. {
  506. return true;
  507. }
  508. /// <summary>
  509. /// 保存数据
  510. /// </summary>
  511. /// <param name="db"></param>
  512. /// <returns></returns>
  513. private ResponseModel SaveEnd(DataAccess db)
  514. {
  515. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  516. sw.Start();
  517. ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
  518. try
  519. {
  520. TypeDescriptor md = TypeDescriptor.ParserMeta(this);//获取实体的元数据
  521. if (db.IsNull())
  522. db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  523. if (db.IsNull())
  524. {
  525. result.IsSuccess = false;
  526. result.Message = "数据库配置不正确";
  527. return result;
  528. }
  529. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
  530. qcBuilder.TypeDes = md;//所有实体属性
  531. qcBuilder.PersistType = PersistType;
  532. cmd = qcBuilder.GetQueryCommand();//解析SQL语句
  533. result.DBConfig = db.ConnectionString;
  534. int num = 0; var location = cmd.CommandText.EndsWith(ConstSql.SQL_SCOPE_IDENTITY, StringComparison.CurrentCultureIgnoreCase);
  535. if (location)
  536. {
  537. num = (!cmd.CommandText.IsEmpty()) ? db.ExecuteScalar(cmd.CommandText, cmd.Parameters).ToInt32() : 0;//执行SQL语句
  538. result.RecordNum = num;
  539. }
  540. else
  541. {
  542. num = (!cmd.CommandText.IsEmpty()) ? db.ExecuteNonQuery(cmd.CommandText, cmd.Parameters).ToInt32() : 0;
  543. }
  544. result.IsSuccess = num > 0;
  545. sw.Stop();
  546. string str = sw.Elapsed.ToString();
  547. result.Message = "保存成功,用时:" + str;
  548. sw = null;
  549. }
  550. catch (Exception ex)
  551. {
  552. //LogHelper.WriteExLog(ex);
  553. result.IsSuccess = false;
  554. result.Message = ex.ToString();
  555. }
  556. finally
  557. {
  558. string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment);
  559. result.StrSql = showsqlstr;
  560. if (db.IfNotNull()) db.Close();
  561. }
  562. return result;
  563. }
  564. /// <summary>
  565. /// 删除最终方法
  566. /// </summary>
  567. /// <param name="oid"></param>
  568. /// <param name="db"></param>
  569. /// <returns></returns>
  570. private ResponseModel DeleteEnd(string oid, DataAccess db)
  571. {
  572. ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand();
  573. try
  574. {
  575. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  576. sw.Start();
  577. TypeDescriptor md = null;
  578. if (oid.IsEmpty())
  579. {
  580. md = TypeDescriptor.ParserMeta(this); //获取实体的元数据
  581. }
  582. else
  583. {
  584. md = TypeDescriptor.GetDescriptor(typeof(T)); //获取实体的元数据
  585. md.ModuleName = Activator.CreateInstance<T>().ModuleName;
  586. md.WhereSql = ModPerkey(md.PrimaryKey.Column.Name, oid); //自定义查询条件
  587. }
  588. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  589. if (db.IsNull())
  590. {
  591. result.IsSuccess = false;
  592. result.Message = "数据库配置不正确";
  593. return result;
  594. }
  595. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  596. qcBuilder.TypeDes = md;
  597. qcBuilder.PersistType = EntityPersistType.Delete;
  598. cmd = qcBuilder.GetQueryCommand();
  599. int num = db.ExecuteNonQuery(cmd.CommandText, cmd.Parameters);//执行SQL语句
  600. sw.Stop();
  601. string str = sw.Elapsed.ToString();
  602. result.IsSuccess = num > 0;
  603. result.Message = "删除成功,用时:" + str;
  604. sw = null;
  605. }
  606. catch (Exception ex)
  607. {
  608. //LogHelper.WriteExLog(ex);
  609. //
  610. result.IsSuccess = false;
  611. result.Message = ex.ToString();
  612. }
  613. finally
  614. {
  615. result.StrSql = cmd.SqlString;
  616. result.DBConfig = db.ConnectionString;
  617. if (!db.IsNull()) db.Close();
  618. }
  619. return result;
  620. }
  621. /// <summary>
  622. /// 获取DataTable转List的方法
  623. /// </summary>
  624. /// <param name="showfield"></param>
  625. /// <param name="db"></param>
  626. /// <returns></returns>
  627. private ResponseModel GetDtListEnd(RequestModel enty)
  628. {
  629. var result = new ResponseModel(); DataAccess db = enty.db; QueryCommand cmd = new QueryCommand();
  630. try
  631. {
  632. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  633. sw.Start();
  634. TypeDescriptor md = TypeDescriptor.ParserMeta(this);//获取实体的元数据
  635. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  636. if (db.IsNull())
  637. {
  638. result.IsSuccess = false;
  639. result.Message = "数据库配置不正确";
  640. return result;
  641. }
  642. if (enty.newSt.IsNull())
  643. {
  644. result.IsSuccess = false;
  645. result.Message = "备注信息不能为空";
  646. return result;
  647. }
  648. else
  649. {
  650. if (enty.newSt.NewSt.IsNull())
  651. {
  652. result.IsSuccess = false;
  653. result.Message = "备注信息不能为空";
  654. return result;
  655. }
  656. }
  657. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  658. qcBuilder.TypeDes = md;
  659. //qcBuilder.SelectField = enty.SelectField;
  660. qcBuilder.ShowField = enty.ShowField;
  661. if (enty.TopNum > 0)
  662. qcBuilder.Top = enty.TopNum.ToString();
  663. qcBuilder.PersistType = EntityPersistType.Query;//操作方式
  664. cmd = qcBuilder.GetQueryCommand();
  665. DataTable dt = new DataTable();
  666. System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames();
  667. string sqlWithComment = string.Empty;
  668. if (sfs.Count() > 0)
  669. {
  670. System.Diagnostics.StackFrame infos = sfs[0];
  671. System.Reflection.MethodBase mb = infos.GetMethod();
  672. var filename = infos.GetFileName();
  673. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  674. }
  675. dt = db.ExecuteDataTable(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters);
  676. sw.Stop();
  677. string str = sw.Elapsed.ToString();
  678. result.IsSuccess = dt.IsHaveRows();
  679. result.DataTable = dt;
  680. result.Message = string.Format("返回数据成功记录数:{0}耗时:{1}", dt.Rows.Count, str);
  681. sw = null;
  682. return result;
  683. }
  684. catch (Exception ex)
  685. {
  686. //LogHelper.WriteExLog(ex);
  687. result.IsSuccess = false;
  688. result.Message = ex.ToString();
  689. return result;
  690. }
  691. finally
  692. {
  693. result.StrSql = cmd.SqlString;
  694. result.DBConfig = db.ConnectionString;
  695. if (!db.IsNull()) db.Close();
  696. }
  697. return result;
  698. }
  699. /// <summary>
  700. /// 由DataReader转DataTable
  701. /// </summary>
  702. /// <param name="enty"></param>
  703. /// <returns></returns>
  704. private ResponseModel GetDr2DtListEnd(RequestModel enty)
  705. {
  706. var result = new ResponseModel(); DataAccess db = enty.db; QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
  707. try
  708. {
  709. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  710. sw.Start();
  711. TypeDescriptor md = TypeDescriptor.ParserMeta(this);//获取实体的元数据
  712. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  713. if (db.IsNull())
  714. {
  715. result.IsSuccess = false;
  716. result.Message = "数据库配置不正确";
  717. return result;
  718. }
  719. if (enty.newSt.IsNull())
  720. {
  721. result.IsSuccess = false;
  722. result.Message = "备注信息不能为空";
  723. return result;
  724. }
  725. else
  726. {
  727. if (enty.newSt.NewSt.IsNull())
  728. {
  729. result.IsSuccess = false;
  730. result.Message = "备注信息不能为空";
  731. return result;
  732. }
  733. }
  734. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  735. qcBuilder.TypeDes = md;
  736. //qcBuilder.SelectField = enty.SelectField;
  737. qcBuilder.ShowField = enty.ShowField;
  738. if (enty.TopNum > 0)
  739. qcBuilder.Top = enty.TopNum.ToString();
  740. qcBuilder.PersistType = EntityPersistType.Query;//操作方式
  741. cmd = qcBuilder.GetQueryCommand();
  742. DataTable dt = new DataTable();
  743. //dt = db.ExecuteDataTable(cmd.CommandText, cmd.Parameters);
  744. //sw.Stop();
  745. //string str = sw.Elapsed.ToString();
  746. System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames();
  747. if (sfs.Count() > 0)
  748. {
  749. System.Diagnostics.StackFrame infos = sfs[0];
  750. System.Reflection.MethodBase mb = infos.GetMethod();
  751. var filename = infos.GetFileName();
  752. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  753. }
  754. using (IDataReader rdr = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters))
  755. {
  756. dt = DataToModel.Dr2Dt(rdr);
  757. }
  758. sw.Stop();
  759. string str = sw.Elapsed.ToString();
  760. result.IsSuccess = dt.IsHaveRows();
  761. result.DataTable = dt;
  762. result.Message = string.Format("返回数据成功记录数:{0}耗时:{1}", dt.Rows.Count, str);
  763. return result;
  764. }
  765. catch (Exception ex)
  766. {
  767. //LogHelper.WriteExLog(ex);
  768. result.IsSuccess = false;
  769. result.Message = ex.ToString();
  770. return result;
  771. }
  772. finally
  773. {
  774. string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment);
  775. result.StrSql = showsqlstr;
  776. result.DBConfig = db.ConnectionString;
  777. if (!db.IsNull()) db.Close();
  778. }
  779. return result;
  780. }
  781. /// <summary>
  782. /// 通过DataReader返回List集合这种效率高
  783. /// </summary>
  784. /// <param name="showfield">显示字段</param>
  785. /// <param name="db">数据对象</param>
  786. /// <returns>返回Object类型的数据</returns>
  787. private ResponseModel GetDr2EnListEnd(RequestModel enty)
  788. {
  789. var result = new ResponseModel(); DataAccess db = enty.db; QueryCommand cmd = new QueryCommand();
  790. try
  791. {
  792. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  793. sw.Start();
  794. TypeDescriptor md = TypeDescriptor.ParserMeta(this);//获取实体的元数据
  795. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  796. if (db.IsNull())
  797. {
  798. result.IsSuccess = false;
  799. result.Message = "数据库配置不正确";
  800. return result;
  801. }
  802. if (enty.newSt.IsNull())
  803. {
  804. result.IsSuccess = false;
  805. result.Message = "备注信息不能为空";
  806. return result;
  807. }
  808. else
  809. {
  810. if (enty.newSt.NewSt.IsNull())
  811. {
  812. result.IsSuccess = false;
  813. result.Message = "备注信息不能为空";
  814. return result;
  815. }
  816. }
  817. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  818. qcBuilder.TypeDes = md;
  819. //qcBuilder.SelectField = enty.SelectField;
  820. qcBuilder.ShowField = enty.ShowField;
  821. if (enty.TopNum > 0)
  822. qcBuilder.Top = enty.TopNum.ToString();
  823. qcBuilder.PersistType = EntityPersistType.Query;//操作方式
  824. cmd = qcBuilder.GetQueryCommand();
  825. List<T> objlist = new List<T>();
  826. System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames();
  827. string sqlWithComment = string.Empty;
  828. if (sfs.Count() > 0)
  829. {
  830. System.Diagnostics.StackFrame infos = sfs[0];
  831. System.Reflection.MethodBase mb = infos.GetMethod();
  832. var filename = infos.GetFileName();
  833. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  834. }
  835. using (IDataReader rdr = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters))
  836. {
  837. objlist = DataToModel.Dr2EnList<T>(rdr);
  838. }
  839. sw.Stop();
  840. string str = sw.Elapsed.ToString();
  841. result.IsSuccess = objlist.Count > 0;
  842. if (result.IsSuccess)
  843. {
  844. result.ResultModel = objlist;
  845. result.Message = string.Format("返回数据成功记录数:{0}耗时:{1}", objlist.Count, str);
  846. }
  847. else
  848. {
  849. result.Message = "返回失败";
  850. result.StrSql = cmd.SqlString;
  851. }
  852. return result;
  853. }
  854. catch (Exception ex)
  855. {
  856. //LogHelper.WriteExLog(ex);
  857. result.IsSuccess = false;
  858. result.Message = ex.ToString();
  859. return result;
  860. }
  861. finally
  862. {
  863. result.DBConfig = db.ConnectionString;
  864. if (!db.IsNull()) db.Close();
  865. }
  866. }
  867. /// <summary>
  868. /// 查询DataTable转换成实体效率不高(要求性不高的情况下使用)
  869. /// </summary>
  870. /// <param name="db"></param>
  871. /// <param name="showfield"></param>
  872. /// <returns></returns>
  873. private ResponseModel GetDt2EnListEnd(RequestModel enty)
  874. {
  875. var result = new ResponseModel(); DataAccess db = enty.db; QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
  876. try
  877. {
  878. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  879. sw.Start();
  880. //QueryCommandBuilders querycommdlist = new QueryCommandBuilders();
  881. TypeDescriptor md = TypeDescriptor.ParserMeta(this);//获取实体的元数据
  882. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  883. if (db.IsNull())
  884. {
  885. result.IsSuccess = false;
  886. result.Message = "数据库配置不正确";
  887. return result;
  888. }
  889. if (enty.newSt.IsNull())
  890. {
  891. result.IsSuccess = false;
  892. result.Message = "备注信息不能为空";
  893. return result;
  894. }
  895. else
  896. {
  897. if (enty.newSt.NewSt.IsNull())
  898. {
  899. result.IsSuccess = false;
  900. result.Message = "备注信息不能为空";
  901. return result;
  902. }
  903. }
  904. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  905. qcBuilder.TypeDes = md;
  906. //qcBuilder.SelectField = enty.SelectField;
  907. qcBuilder.ShowField = enty.ShowField;
  908. if (enty.TopNum > 0)
  909. qcBuilder.Top = enty.TopNum.ToString();
  910. qcBuilder.PersistType = EntityPersistType.Query;
  911. cmd = qcBuilder.GetQueryCommand();
  912. // querycommdlist.Add(qcBuilder);
  913. System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames();
  914. if (sfs.Count() > 0)
  915. {
  916. System.Diagnostics.StackFrame infos = sfs[0];
  917. System.Reflection.MethodBase mb = infos.GetMethod();
  918. var filename = infos.GetFileName();
  919. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  920. }
  921. DataTable dt = db.ExecuteDataTable(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters);
  922. var objlist = DataToModel.Dt2EnList<T>(dt);
  923. sw.Stop();
  924. string str = sw.Elapsed.ToString();
  925. result.ResultModel = objlist;
  926. result.IsSuccess = objlist.Count > 0;
  927. result.Message = string.Format("返回数据成功记录数:{0}耗时:{1}", objlist.Count, str);
  928. return result;
  929. }
  930. catch (Exception ex)
  931. {
  932. //LogHelper.WriteExLog(ex);
  933. result.IsSuccess = false;
  934. result.Message = ex.ToString();
  935. return result;
  936. }
  937. finally
  938. {
  939. string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment);
  940. result.StrSql = showsqlstr;
  941. result.DBConfig = db.ConnectionString;
  942. if (!db.IsNull()) db.Close();
  943. }
  944. }
  945. /// <summary>
  946. /// 批量更新操作
  947. /// </summary>
  948. /// <param name="request"></param>
  949. /// <returns></returns>
  950. //private ResponseModel UpdateEntityEnd(object entyvalue, DataAccess db)
  951. private ResponseModel UpdateEntityEnd(ResquestUpdateModel request)
  952. {
  953. ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand();
  954. try
  955. {
  956. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  957. sw.Start();
  958. MetaData md = (request.QueryModel.IfNotNull()) ? MetaDataManager.GetMetaData(this, request.QueryModel) : MetaDataManager.GetMetaData(this);//获取实体的元数据
  959. if (request.db.IsNull()) request.db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
  960. if (request.db.IsNull())
  961. {
  962. result.IsSuccess = false;
  963. result.Message = "数据库配置不正确";
  964. return result;
  965. }
  966. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(request.db.DatabaseType);////构建生成哪种SQL语句
  967. qcBuilder.Md = md;
  968. qcBuilder.PersistType = EntityPersistType.Update;
  969. qcBuilder.Predicate = request.Predicate;
  970. cmd = qcBuilder.GetQueryCommand();//解析SQL语句
  971. int num = request.db.ExecuteNonQuery(cmd.CommandText, cmd.Parameters);//执行SQL语句
  972. sw.Stop();
  973. string str = sw.Elapsed.ToString();
  974. result.IsSuccess = num > 0;
  975. result.Message = "数据更新成功,用时:" + str;
  976. }
  977. catch (Exception ex)
  978. {
  979. //
  980. result.IsSuccess = false;
  981. result.Message = ex.ToString();
  982. }
  983. finally
  984. {
  985. result.StrSql = cmd.SqlString;
  986. result.DBConfig = request.db.ConnectionString;
  987. if (!request.db.IsNull()) request.db.Close();
  988. }
  989. return result;
  990. }
  991. #region Old分页GetPageRecordDt代码
  992. ///// <summary>
  993. ///// 获取分页数据
  994. ///// </summary>
  995. ///// <param name="startNum"></param>
  996. ///// <param name="pageSize"></param>
  997. ///// <returns></returns>
  998. //public override ResponseTable GetPageRecordDt(string showfield, int startNum, int pageSize)
  999. //{
  1000. // SqlCmd = new Dictionary<string, QueryParameterCollection>(); db = null;
  1001. // try
  1002. // {
  1003. // QueryCommandBuilders querycommd = new QueryCommandBuilders();
  1004. // MetaData md = MetaDataManager.GetMetaData(this);//获取实体的元数据
  1005. // if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  1006. // QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  1007. // qcBuilder.Md = md;//实体属性
  1008. // qcBuilder.PersistType = EntityPersistType.QueryPage;//操作方式
  1009. // qcBuilder.PageNo = startNum;
  1010. // qcBuilder.PageSize = pageSize;
  1011. // qcBuilder.ShowField = showfield;
  1012. // QueryCommand cmd = qcBuilder.GetQueryCommand();
  1013. // querycommd.Add(qcBuilder);
  1014. // if (md.ReferenceObjects.Count > 0)
  1015. // {
  1016. // md = MetaDataManager.GetMetaData(this);//获取实体的元数据
  1017. // if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  1018. // qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  1019. // qcBuilder.Md = md;//实体属性
  1020. // qcBuilder.PersistType = EntityPersistType.QueryPage;//操作方式
  1021. // qcBuilder.PageNo = startNum;
  1022. // qcBuilder.PageSize = pageSize;
  1023. // cmd = qcBuilder.GetQueryCommand();
  1024. // querycommd.Add(qcBuilder);
  1025. // }
  1026. // SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  1027. // DataTable dt = db.ExecuteDataTable(cmd.CommandText, cmd.Parameters);
  1028. // return dt;
  1029. // }
  1030. // catch (Exception ex)
  1031. // {
  1032. // LogHelper.WriteExLog(ex);
  1033. // //
  1034. // return new DataTable();
  1035. // }
  1036. // finally
  1037. // {
  1038. // if (!db.IsNull()) db.Close();
  1039. // }
  1040. //}
  1041. #endregion
  1042. #region OldGetEntity
  1043. ///// <summary>
  1044. ///// 获取单个实体
  1045. ///// </summary>
  1046. ///// <param name="oid"></param>
  1047. ///// <returns></returns>
  1048. //public override ResponseModel GetEntity(string oid, string showfield, DataAccess db)
  1049. //{
  1050. // lock (this) //处理并发情况(分布式情况)
  1051. // {
  1052. // T obj = Activator.CreateInstance<T>(); var result = new ResponseModel();
  1053. // try
  1054. // {
  1055. // if (!string.IsNullOrEmpty(oid))
  1056. // {
  1057. // SqlCmd = new Dictionary<string, QueryParameterCollection>();
  1058. // #region 获取主对象
  1059. // MetaData md = MetaDataManager.GetMetaData(typeof(T));//获取实体的元数据
  1060. // md.ModuleName = Activator.CreateInstance<T>().ModuleName;
  1061. // md.WhereSql = ModPerkey(md.PrimaryKey, oid);//自定义查询条件
  1062. // if (db.IsNull())
  1063. // {
  1064. // db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  1065. // }
  1066. // QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
  1067. // qcBuilder.Md = md;
  1068. // qcBuilder.PersistType = EntityPersistType.Query;
  1069. // qcBuilder.ShowField = showfield;
  1070. // qcBuilder.Top = "1";
  1071. // qcBuilder.SqlType = SqlEnum.MainSql;
  1072. // QueryCommand cmd = qcBuilder.GetQueryCommand();//生成SQL语句和参数
  1073. // SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  1074. // using (IDataReader rdr = db.ExecuteDataReader(cmd.CommandText, cmd.Parameters))
  1075. // {
  1076. // obj = DataToModel.Dr2En<T>(rdr);
  1077. // }
  1078. // #endregion
  1079. // #region 获取扩展对象
  1080. // if (md.ReferenceObjects.Count > 0)
  1081. // {
  1082. // qcBuilder.Fields = MetaDataManager.GetEntityFields(obj);
  1083. // qcBuilder.SqlType = SqlEnum.ReferenceSql;
  1084. // if (qcBuilder.Fields.Count > 0)
  1085. // {
  1086. // cmd = qcBuilder.GetQueryCommand();//生成SQL语句和参数
  1087. // if (cmd.Parameters.Count > 0)
  1088. // {
  1089. // using (IDataReader rdr2 = db.ExecuteDataReader(cmd.CommandText, cmd.Parameters))
  1090. // {
  1091. // obj = DataToModel.Dr2En<T>(rdr2, obj);
  1092. // }
  1093. // }
  1094. // }
  1095. // }
  1096. // #endregion
  1097. // result.IsSuccess = true;
  1098. // result.Mod = obj;
  1099. // return result;
  1100. // }
  1101. // else
  1102. // {
  1103. // result.IsSuccess = false;
  1104. // result.Message = "没有查询找到数据";
  1105. // result.Mod = obj;
  1106. // return result;
  1107. // }
  1108. // }
  1109. // catch (Exception ex)
  1110. // {
  1111. // LogHelper.WriteExLog(ex);
  1112. // result.Message = ex.ToString();
  1113. // return result;
  1114. // }
  1115. // finally
  1116. // {
  1117. // if (!db.IsNull()) db.Close();
  1118. // }
  1119. // }
  1120. //}
  1121. #endregion
  1122. #endregion
  1123. #region 获取带扩展属性的实体集合
  1124. /// <summary>
  1125. ///
  1126. /// </summary>
  1127. /// <returns></returns>
  1128. //public override ResponseModelList GetReferenceList(int startNum, int pageSize)
  1129. //{
  1130. // db = null;
  1131. // return GetReferenceList(db, startNum, pageSize);
  1132. //}
  1133. /// <summary>
  1134. /// 获取带扩展属性的实体集合用关联SQL语句来实现
  1135. /// </summary>
  1136. /// <param name="db"></param>
  1137. /// <returns></returns>
  1138. //public override ResponseModelList GetReferenceList(DataAccess db, int startNum, int pageSize)
  1139. //{
  1140. // SqlCmd = new Dictionary<string, QueryParameterCollection>(); db = null;
  1141. // var result = new ResponseModelList();
  1142. // try
  1143. // {
  1144. // MetaData md = MetaDataManager.GetMetaData(this);//获取实体的元数据
  1145. // if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  1146. // QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  1147. // qcBuilder.Md = md;
  1148. // qcBuilder.PageNo = startNum;
  1149. // qcBuilder.PageSize = pageSize;
  1150. // qcBuilder.PersistType = EntityPersistType.LeftJoin;
  1151. // QueryCommand cmd = qcBuilder.GetQueryCommand();
  1152. // DataTable dt = new DataTable();
  1153. // SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  1154. // dt = db.ExecuteDataTable(cmd.CommandText, cmd.Parameters);
  1155. // var objlist = DataToModel.Dt2EnList<T>(dt);
  1156. // result.IsSuccess = true;
  1157. // result.ModList = objlist;
  1158. // return result;
  1159. // }
  1160. // catch (Exception ex)
  1161. // {
  1162. // LogHelper.WriteExLog(ex);
  1163. // result.Message = ex.ToString();
  1164. // return result;
  1165. // }
  1166. // finally
  1167. // {
  1168. // if (!db.IsNull()) db.Close();
  1169. // }
  1170. //}
  1171. #endregion
  1172. /// <summary>
  1173. /// 查询条件表达式
  1174. /// </summary>
  1175. /// <param name="type"></param>
  1176. /// <param name="oid">主键值</param>
  1177. /// <returns></returns>
  1178. private string ModPerkey(string oid, string value)
  1179. {
  1180. string tmpFilter = value;
  1181. if (!string.IsNullOrEmpty(tmpFilter))
  1182. tmpFilter = oid + "='" + tmpFilter + "'";
  1183. return tmpFilter;
  1184. }
  1185. public override void GetDetail(int level)
  1186. {
  1187. throw new NotImplementedException();
  1188. }
  1189. /// <summary>
  1190. /// 给实体赋值
  1191. /// </summary>
  1192. /// <param name="FieldName">字段名称</param>
  1193. /// <param name="defaultValue">默认值</param>
  1194. protected void SetChanaged(string FieldName, object defaultValue)
  1195. {
  1196. if (!Values.ContainsKey(FieldName))
  1197. {
  1198. EntityValue val = new EntityValue();
  1199. val.OriginalValue = defaultValue;
  1200. val.FieldName = FieldName;
  1201. val.IsChanage = false;
  1202. Values.Add(FieldName, val);
  1203. }
  1204. else
  1205. {
  1206. EntityValue val = base.Values[FieldName];
  1207. if (object.Equals(val.OriginalValue, defaultValue))
  1208. {
  1209. val.CurrentValue = null;
  1210. val.IsChanage = false;
  1211. }
  1212. else
  1213. {
  1214. val.CurrentValue = defaultValue;
  1215. val.IsChanage = true;
  1216. }
  1217. }
  1218. }
  1219. /// <summary>
  1220. /// 获得对象的值
  1221. /// </summary>
  1222. /// <param name="FieldName">字段名称</param>
  1223. /// <returns></returns>
  1224. protected object ToValue(string FieldName)
  1225. {
  1226. if (base.Values.ContainsKey(FieldName))
  1227. {
  1228. EntityValue val = base.Values[FieldName];
  1229. if (val.CurrentValue != null)
  1230. {
  1231. return val.CurrentValue;
  1232. }
  1233. if (val.OriginalValue != null)
  1234. {
  1235. return val.OriginalValue;
  1236. }
  1237. return null;
  1238. }
  1239. return null;
  1240. }
  1241. /// <summary>
  1242. /// 属性值修改情况
  1243. /// </summary>
  1244. /// <param name="FieldName">字段名称</param>
  1245. /// <param name="currentValue">当前值</param>
  1246. protected void ToChanaged(string FieldName, object currentValue)
  1247. {
  1248. if (base.Values.ContainsKey(FieldName))
  1249. {
  1250. EntityValue val = base.Values[FieldName];
  1251. if (object.Equals(val.OriginalValue, currentValue))
  1252. {
  1253. val.CurrentValue = null;
  1254. val.IsChanage = false;
  1255. }
  1256. else
  1257. {
  1258. val.CurrentValue = currentValue;
  1259. val.IsChanage = true;
  1260. }
  1261. }
  1262. }
  1263. [JsonIgnore, NotMapped]
  1264. public override string ModuleName
  1265. {
  1266. get;
  1267. set;
  1268. }
  1269. }
  1270. }