PageRenderTime 87ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 1ms

/src/RaisingStudio.Data.Providers/Adapters/DataObjectAdapter.cs

#
C# | 5686 lines | 3709 code | 402 blank | 1575 comment | 399 complexity | 2335fd6590c0f44dd55979733801693b MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0, Apache-2.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using RaisingStudio.Data.Common;
  5. using RaisingStudio.Data.Common.Factories;
  6. using RaisingStudio.Data.Expressions;
  7. using RaisingStudio.Data.Common.Builders.Expressions;
  8. using RaisingStudio.Data.Common.Managers;
  9. using System.Data.Common;
  10. using RaisingStudio.Data.Providers.Exceptions;
  11. using System.Data;
  12. namespace RaisingStudio.Data.Providers.Adapters
  13. {
  14. public delegate object CreateDataObjectDelegate();
  15. public delegate System.Collections.IList CreateDataObjectListDelegate();
  16. /// <summary>
  17. /// data object DataAdapter.
  18. /// </summary>
  19. public partial class DataObjectAdapter : DataAdapterBase, RaisingStudio.Data.Common.IDataObjectAdapter
  20. {
  21. #region Common property
  22. protected System.Type dataObjectType;
  23. /// <summary>
  24. /// Type of data object.
  25. /// </summary>
  26. public System.Type DataObjectType
  27. {
  28. get
  29. {
  30. return this.dataObjectType;
  31. }
  32. }
  33. protected string definitionName;
  34. /// <summary>
  35. /// object definition name.
  36. /// </summary>
  37. public string DefinitionName
  38. {
  39. get
  40. {
  41. return this.definitionName;
  42. }
  43. }
  44. protected RaisingStudio.Data.Common.Builders.CommandBuilder commandBuilder;
  45. /// <summary>
  46. /// Command builder.
  47. /// </summary>
  48. public RaisingStudio.Data.Common.Builders.CommandBuilder CommandBuilder
  49. {
  50. get
  51. {
  52. if (this.commandBuilder == null)
  53. {
  54. this.commandBuilder = CreateCommandBuilder();
  55. }
  56. return this.commandBuilder;
  57. }
  58. }
  59. protected System.Data.Common.DataTableMapping defaultDataTableMapping;
  60. /// <summary>
  61. /// default Data table mapping.
  62. /// </summary>
  63. public System.Data.Common.DataTableMapping DefaultDataTableMapping
  64. {
  65. get
  66. {
  67. if (this.defaultDataTableMapping == null)
  68. {
  69. this.defaultDataTableMapping = this.CommandBuilder.CommonCommandBuilder.GetDataTableMapping();
  70. }
  71. return this.defaultDataTableMapping;
  72. }
  73. }
  74. #endregion
  75. #if (PocketPC || Smartphone || WindowsCE)
  76. private bool _useDynamicProxy = false;
  77. #else
  78. private bool _useDynamicProxy = true;
  79. #endif
  80. public bool UseDynamicProxy
  81. {
  82. get { return _useDynamicProxy; }
  83. set { _useDynamicProxy = value; }
  84. }
  85. private bool _cacheDefalutCommand = true;
  86. public bool CacheDefalutCommand
  87. {
  88. get { return _cacheDefalutCommand; }
  89. set { _cacheDefalutCommand = value; }
  90. }
  91. #region Constructor
  92. /// <summary>
  93. /// Constructor
  94. /// </summary>
  95. /// <param name="dataObjectType">Type of data object.</param>
  96. public DataObjectAdapter(System.Type dataObjectType)
  97. {
  98. this.dataObjectType = dataObjectType;
  99. this.connection = ConnectionFactory.CreateConnection();
  100. DatabaseType databaseType;
  101. string providerName;
  102. ConnectionFactory.GetConnectionSetting(out databaseType, out providerName);
  103. this._databaseType = databaseType;
  104. this._providerName = providerName;
  105. this.transactionManager = TransactionManagerFactory.CreateTransactionManager(this.connection);
  106. }
  107. /// <summary>
  108. /// Constructor
  109. /// </summary>
  110. /// <param name="dataObjectType">Type of data object.</param>
  111. /// <param name="connection">database connection.</param>
  112. public DataObjectAdapter(System.Type dataObjectType, System.Data.IDbConnection connection)
  113. {
  114. this.dataObjectType = dataObjectType;
  115. this.connection = connection;
  116. this.transactionManager = TransactionManagerFactory.CreateTransactionManager(this.connection);
  117. }
  118. public DataObjectAdapter(System.Type dataObjectType, System.Data.IDbConnection connection, DatabaseType databaseType, string providerName)
  119. : this(dataObjectType, connection)
  120. {
  121. this._databaseType = databaseType;
  122. this._providerName = providerName;
  123. }
  124. /// <summary>
  125. /// Constructor
  126. /// </summary>
  127. /// <param name="dataObjectType">Type of data object.</param>
  128. /// <param name="transactionManager">database transaction manager.</param>
  129. public DataObjectAdapter(System.Type dataObjectType, TransactionManager transactionManager, ILogManager logManager)
  130. {
  131. this.dataObjectType = dataObjectType;
  132. this.transactionManager = transactionManager;
  133. this.connection = transactionManager.Connection;
  134. this._logManager = logManager;
  135. }
  136. public DataObjectAdapter(System.Type dataObjectType, TransactionManager transactionManager, DatabaseType databaseType, string providerName, ILogManager logManager)
  137. : this(dataObjectType, transactionManager, logManager)
  138. {
  139. this._databaseType = databaseType;
  140. this._providerName = providerName;
  141. }
  142. /// <summary>
  143. /// Constructor
  144. /// </summary>
  145. /// <param name="dataObjectType">Type of data object.</param>
  146. /// <param name="definitionName">object definition name.</param>
  147. public DataObjectAdapter(System.Type dataObjectType, string definitionName)
  148. : this(dataObjectType)
  149. {
  150. this.definitionName = definitionName;
  151. }
  152. /// <summary>
  153. /// Constructor
  154. /// </summary>
  155. /// <param name="dataObjectType">Type of data object.</param>
  156. /// <param name="definitionName">object definition name.</param>
  157. /// <param name="connection">database connection.</param>
  158. public DataObjectAdapter(System.Type dataObjectType, string definitionName, System.Data.IDbConnection connection)
  159. : this(dataObjectType, connection)
  160. {
  161. this.definitionName = definitionName;
  162. }
  163. public DataObjectAdapter(System.Type dataObjectType, string definitionName, System.Data.IDbConnection connection, DatabaseType databaseType, string providerName)
  164. : this(dataObjectType, definitionName, connection)
  165. {
  166. this._databaseType = databaseType;
  167. this._providerName = providerName;
  168. }
  169. /// <summary>
  170. /// Constructor
  171. /// </summary>
  172. /// <param name="dataObjectType">Type of data object.</param>
  173. /// <param name="definitionName">object definition name.</param>
  174. /// <param name="transactionManager">database transaction manager.</param>
  175. public DataObjectAdapter(System.Type dataObjectType, string definitionName, TransactionManager transactionManager, ILogManager logManager)
  176. : this(dataObjectType, transactionManager, logManager)
  177. {
  178. this.definitionName = definitionName;
  179. }
  180. public DataObjectAdapter(System.Type dataObjectType, string definitionName, TransactionManager transactionManager, DatabaseType databaseType, string providerName, ILogManager logManager)
  181. : this(dataObjectType, definitionName, transactionManager, logManager)
  182. {
  183. this._databaseType = databaseType;
  184. this._providerName = providerName;
  185. }
  186. #endregion
  187. #region Create Command
  188. /// <summary>
  189. /// Create a command builder.
  190. /// </summary>
  191. /// <returns>Command builder.</returns>
  192. public virtual RaisingStudio.Data.Common.Builders.CommandBuilder CreateCommandBuilder()
  193. {
  194. DatabaseType databaseType = GetDatabaseType();
  195. #if !(PocketPC || Smartphone || WindowsCE)
  196. if (databaseType == DatabaseType.SHAREPOINT)
  197. {
  198. if (this.definitionName != null)
  199. {
  200. return new RaisingStudio.Data.Common.Builders.SharePointCommandBuilder(this.connection, databaseType, this._providerName, this.dataObjectType, this.definitionName);
  201. }
  202. else
  203. {
  204. return new RaisingStudio.Data.Common.Builders.SharePointCommandBuilder(this.connection, databaseType, this._providerName, this.dataObjectType);
  205. }
  206. }
  207. else
  208. {
  209. #endif
  210. if (this.definitionName != null)
  211. {
  212. return new RaisingStudio.Data.Common.Builders.CommandBuilder(this.connection, databaseType, this._providerName, this.dataObjectType, this.definitionName);
  213. }
  214. else
  215. {
  216. return new RaisingStudio.Data.Common.Builders.CommandBuilder(this.connection, databaseType, this._providerName, this.dataObjectType);
  217. }
  218. #if !(PocketPC || Smartphone || WindowsCE)
  219. }
  220. #endif
  221. }
  222. public virtual DatabaseType GetDatabaseType()
  223. {
  224. if ((this._databaseType == DatabaseType.OTHER) && (!ProviderManager.Instance.ProviderExists(this._providerName)))
  225. {
  226. DatabaseType databaseType = ConnectionFactory.GetDatabaseType(this.connection);
  227. return databaseType;
  228. }
  229. return this._databaseType;
  230. }
  231. #endregion
  232. #region Create data object
  233. protected CreateDataObjectDelegate createDataObjectMethod;
  234. /// <summary>
  235. /// Create data object delegate.
  236. /// </summary>
  237. public CreateDataObjectDelegate CreateDataObjectMethod
  238. {
  239. get
  240. {
  241. return this.createDataObjectMethod;
  242. }
  243. set
  244. {
  245. this.createDataObjectMethod = value;
  246. }
  247. }
  248. /// <summary>
  249. /// Create Data object.
  250. /// </summary>
  251. /// <returns>Data object.</returns>
  252. public virtual object CreateDataObject()
  253. {
  254. if (this.createDataObjectMethod != null)
  255. {
  256. return this.createDataObjectMethod();
  257. }
  258. else
  259. {
  260. if (UseDynamicProxy)
  261. {
  262. #region UseDynamicProxy
  263. IObjectCreater objectCreater = GetObjectCreater(dataObjectType, this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns);
  264. if (objectCreater != null)
  265. {
  266. object dataObject = objectCreater.CreateObject();
  267. return dataObject;
  268. }
  269. else
  270. {
  271. // TODO: exception.
  272. #region Reflection
  273. object dataObject = System.Activator.CreateInstance(this.dataObjectType);
  274. return dataObject;
  275. #endregion
  276. }
  277. #endregion
  278. }
  279. else
  280. {
  281. #region Reflection
  282. object dataObject = System.Activator.CreateInstance(this.dataObjectType);
  283. return dataObject;
  284. #endregion
  285. }
  286. }
  287. }
  288. protected CreateDataObjectListDelegate createDataObjectListMethod;
  289. /// <summary>
  290. /// Create data object column table delegate.
  291. /// </summary>
  292. public CreateDataObjectListDelegate CreateDataObjectListMethod
  293. {
  294. get
  295. {
  296. return this.createDataObjectListMethod;
  297. }
  298. set
  299. {
  300. this.createDataObjectListMethod = value;
  301. }
  302. }
  303. /// <summary>
  304. /// Create data object column table.
  305. /// </summary>
  306. /// <returns>data object column table.</returns>
  307. public virtual System.Collections.IList CreateDataObjectList()
  308. {
  309. if (this.createDataObjectListMethod != null)
  310. {
  311. return this.createDataObjectListMethod();
  312. }
  313. else
  314. {
  315. if (UseDynamicProxy)
  316. {
  317. #region UseDynamicProxy
  318. IObjectCreater objectCreater = GetObjectCreater(dataObjectType, this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns);
  319. if (objectCreater != null)
  320. {
  321. System.Collections.IList dataObjectList = objectCreater.CreateObjectList();
  322. return dataObjectList;
  323. }
  324. else
  325. {
  326. // TODO: exception.
  327. #region Reflection
  328. System.Type listType = typeof(List<>);
  329. System.Type dataObjectListType = listType.MakeGenericType(this.dataObjectType);
  330. System.Collections.IList dataObjectList = System.Activator.CreateInstance(dataObjectListType) as System.Collections.IList;
  331. return dataObjectList;
  332. #endregion
  333. }
  334. #endregion
  335. }
  336. else
  337. {
  338. #region Reflection
  339. System.Type listType = typeof(List<>);
  340. System.Type dataObjectListType = listType.MakeGenericType(this.dataObjectType);
  341. System.Collections.IList dataObjectList = System.Activator.CreateInstance(dataObjectListType) as System.Collections.IList;
  342. return dataObjectList;
  343. #endregion
  344. }
  345. }
  346. }
  347. #endregion
  348. #region Transactions
  349. /// <summary>
  350. /// Begin Database transaction.
  351. /// </summary>
  352. /// <returns>The ID of transaction.</returns>
  353. public virtual string BeginTransaction()
  354. {
  355. return this.transactionManager.BeginTransaction();
  356. }
  357. /// <summary>
  358. /// Begin Database transaction.
  359. /// </summary>
  360. /// <param name="isolationLevel">Specifies the isolation level for the transaction.</param>
  361. /// <returns>The ID of transaction.</returns>
  362. public virtual string BeginTransaction(System.Data.IsolationLevel isolationLevel)
  363. {
  364. return this.transactionManager.BeginTransaction(isolationLevel);
  365. }
  366. /// <summary>
  367. /// Commit Database transaction.
  368. /// </summary>
  369. public virtual void CommitTransaction()
  370. {
  371. this.transactionManager.CommitTransaction();
  372. }
  373. /// <summary>
  374. /// Commit Database transaction.
  375. /// </summary>
  376. /// <param name="transactionID">The ID of transaction.</param>
  377. public virtual void CommitTransaction(string transactionID)
  378. {
  379. this.transactionManager.CommitTransaction(transactionID);
  380. }
  381. /// <summary>
  382. /// Rollback transaction.
  383. /// </summary>
  384. public virtual void RollbackTransaction()
  385. {
  386. this.transactionManager.RollbackTransaction();
  387. }
  388. /// <summary>
  389. /// Rollback transaction.
  390. /// </summary>
  391. /// <param name="transactionID">The ID of transaction.</param>
  392. public virtual void RollbackTransaction(string transactionID)
  393. {
  394. this.transactionManager.RollbackTransaction(transactionID);
  395. }
  396. #endregion
  397. #region Gets primary key value
  398. /// <summary>
  399. /// Gets data object The value of primary key.
  400. /// </summary>
  401. /// <param name="dataObject">Data object.</param>
  402. /// <returns>The value of primary key.</returns>
  403. public virtual object[] GetPrimaryKeys(object dataObject)
  404. {
  405. object[] primaryKeys = new object[this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.PrimaryKeys.Count];
  406. if (UseDynamicProxy)
  407. {
  408. #region UseDynamicProxy
  409. System.Type dataObjectType = dataObject.GetType();
  410. IObjectAccessor objectAccessor = GetObjectAccessor(dataObjectType, this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns);
  411. if (objectAccessor != null)
  412. {
  413. for (int i = 0; i < this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.PrimaryKeys.Count; i++)
  414. {
  415. string columnName = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.PrimaryKeys[i];
  416. primaryKeys[i] = objectAccessor.GetValue(dataObject, columnName);
  417. }
  418. }
  419. else
  420. {
  421. // TODO: exception.
  422. throw new ObjectAccessorException(string.Format("Can't get ObjectAccessor for type [{0}].", dataObjectType));
  423. }
  424. #endregion
  425. }
  426. else
  427. {
  428. if (dataObject is IObjectAccessor)
  429. {
  430. #region IObjectAccessor
  431. IObjectAccessor objectAccessor = dataObject as IObjectAccessor;
  432. if (objectAccessor != null)
  433. {
  434. for (int i = 0; i < this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.PrimaryKeys.Count; i++)
  435. {
  436. string columnName = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.PrimaryKeys[i];
  437. primaryKeys[i] = objectAccessor.GetValue(dataObject, columnName);
  438. }
  439. }
  440. #endregion
  441. }
  442. else
  443. {
  444. #region Reflection
  445. System.Type dataObjectType = dataObject.GetType();
  446. for (int i = 0; i < this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.PrimaryKeys.Count; i++)
  447. {
  448. string columnName = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.PrimaryKeys[i];
  449. System.Reflection.PropertyInfo propertyInfo = dataObjectType.GetProperty(columnName);
  450. if (propertyInfo != null)
  451. {
  452. primaryKeys[i] = propertyInfo.GetValue(dataObject, null);
  453. }
  454. else
  455. {
  456. throw new System.MissingMemberException(string.Format("Can not find a property named {1} in type {0}.", dataObjectType, columnName));
  457. }
  458. }
  459. #endregion
  460. }
  461. }
  462. return primaryKeys;
  463. }
  464. private IObjectCreater GetObjectCreater(Type dataObjectType, Dictionary<string, DataColumnDefinition> columns)
  465. {
  466. return ObjectAccessorManager.Instance.GetObjectAccessor(dataObjectType, columns) as IObjectCreater;
  467. }
  468. private IObjectAccessor GetObjectAccessor(Type dataObjectType, Dictionary<string, DataColumnDefinition> columns)
  469. {
  470. return ObjectAccessorManager.Instance.GetObjectAccessor(dataObjectType, columns);
  471. }
  472. private IObjectAccessor GetObjectAccessor(Type dataObjectType, DataColumnMappingCollection columnMappings)
  473. {
  474. return ObjectAccessorManager.Instance.GetObjectAccessor(dataObjectType, columnMappings);
  475. }
  476. private Type GetDataObjectPropertyType(Type dataObjectType, string propertyName)
  477. {
  478. return ObjectAccessorManager.Instance.GetPropertyType(dataObjectType, propertyName);
  479. }
  480. #endregion
  481. public void SetParameterValue(object parameter, object value)
  482. {
  483. // TODO: convert.
  484. (parameter as System.Data.IDbDataParameter).Value = value;
  485. }
  486. #region protected methods
  487. /// <summary>
  488. /// FillData item.
  489. /// </summary>
  490. /// <param name="command">Command.</param>
  491. /// <param name="dataTableMapping">Data table mapping.</param>
  492. /// <param name="dataObject">Data object.</param>
  493. /// <param name="primaryKeys">The value of primary key.</param>
  494. /// <param name="transaction">Database transaction.</param>
  495. /// <returns>The result of execute command.</returns>
  496. protected int Fill(System.Data.IDbCommand command, System.Data.Common.DataTableMapping dataTableMapping, object dataObject, object[] primaryKeys, System.Data.IDbTransaction transaction)
  497. {
  498. for (int i = 0; i < command.Parameters.Count; i++)
  499. {
  500. SetParameterValue(command.Parameters[i], primaryKeys[i]);
  501. }
  502. if (transaction != null)
  503. {
  504. command.Transaction = transaction;
  505. }
  506. WriteLog(command);
  507. System.Data.IDataReader dataReader = RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  508. try
  509. {
  510. if (dataReader.Read())
  511. {
  512. if (UseDynamicProxy)
  513. {
  514. #region UseDynamicProxy
  515. System.Type dataObjectType = dataObject.GetType();
  516. IObjectAccessor objectAccessor = GetObjectAccessor(dataObjectType, this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns);
  517. SetDataObjectValues(dataReader, dataTableMapping, dataObjectType, objectAccessor, dataObject);
  518. #endregion
  519. }
  520. else
  521. {
  522. if (dataObject is IDataObjectProxy)
  523. {
  524. #region IObjectAccessor
  525. SetDataObjectValues(dataReader, dataTableMapping, dataObject as IDataObjectProxy, dataObject);
  526. #endregion
  527. }
  528. else
  529. {
  530. #region Reflection
  531. System.Type dataObjectType = dataObject.GetType();
  532. SetDataObjectValues(dataReader, dataTableMapping, dataObjectType, dataObject);
  533. #endregion
  534. }
  535. }
  536. }
  537. }
  538. finally
  539. {
  540. if (dataReader != null)
  541. {
  542. dataReader.Close();
  543. }
  544. }
  545. return dataReader.RecordsAffected;
  546. }
  547. private void SetDataObjectValues(System.Data.IDataReader dataReader, System.Data.Common.DataTableMapping dataTableMapping, System.Type dataObjectType, IObjectAccessor objectAccessor, object dataObject)
  548. {
  549. if (objectAccessor != null)
  550. {
  551. foreach (System.Data.Common.DataColumnMapping dataColumnMapping in dataTableMapping.ColumnMappings)
  552. {
  553. string columnName = dataColumnMapping.DataSetColumn;
  554. string sourceName = dataColumnMapping.SourceColumn;
  555. DataColumnDefinition dataColumnDefinition = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns[columnName];
  556. System.Data.DbType dbType = dataColumnDefinition.DbType;
  557. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceName, dbType);
  558. if (value == System.DBNull.Value)
  559. {
  560. objectAccessor.SetValue(dataObject, columnName, null);
  561. }
  562. else
  563. {
  564. Type propertyType = GetDataObjectPropertyType(dataObjectType, columnName);
  565. value = ConvertDataValue(dbType, propertyType, value);
  566. objectAccessor.SetValue(dataObject, columnName, value);
  567. }
  568. }
  569. }
  570. else
  571. {
  572. // TODO: exception.
  573. throw new ObjectAccessorException(string.Format("Can't get ObjectAccessor for type [{0}].", dataObjectType));
  574. }
  575. }
  576. private void SetDataObjectValues(System.Data.IDataReader dataReader, System.Data.Common.DataTableMapping dataTableMapping, IDataObjectProxy proxy, object dataObject)
  577. {
  578. if (proxy != null)
  579. {
  580. foreach (System.Data.Common.DataColumnMapping dataColumnMapping in dataTableMapping.ColumnMappings)
  581. {
  582. string columnName = dataColumnMapping.DataSetColumn;
  583. string sourceName = dataColumnMapping.SourceColumn;
  584. DataColumnDefinition dataColumnDefinition = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns[columnName];
  585. System.Data.DbType dbType = dataColumnDefinition.DbType;
  586. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceName, dbType);
  587. if (value == System.DBNull.Value)
  588. {
  589. proxy.SetValue(dataObject, columnName, null);
  590. }
  591. else
  592. {
  593. Type propertyType = proxy.GetPropertyType(columnName);
  594. value = ConvertDataValue(dbType, propertyType, value);
  595. proxy.SetValue(dataObject, columnName, value);
  596. }
  597. }
  598. }
  599. else
  600. {
  601. // TODO: exception.
  602. throw new ObjectAccessorException(string.Format("Can't get ObjectAccessor for type [{0}].", dataObjectType));
  603. }
  604. }
  605. private void SetDataObjectValues(System.Data.IDataReader dataReader, System.Data.Common.DataTableMapping dataTableMapping, System.Type dataObjectType, object dataObject)
  606. {
  607. foreach (System.Data.Common.DataColumnMapping dataColumnMapping in dataTableMapping.ColumnMappings)
  608. {
  609. string columnName = dataColumnMapping.DataSetColumn;
  610. string sourceName = dataColumnMapping.SourceColumn;
  611. DataColumnDefinition dataColumnDefinition = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns[columnName];
  612. System.Data.DbType dbType = dataColumnDefinition.DbType;
  613. System.Reflection.PropertyInfo propertyInfo = dataObjectType.GetProperty(columnName);
  614. if (propertyInfo != null)
  615. {
  616. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceName, dbType);
  617. if (value == System.DBNull.Value)
  618. {
  619. propertyInfo.SetValue(dataObject, null, null);
  620. }
  621. else
  622. {
  623. value = ConvertDataValue(dbType, propertyInfo.PropertyType, value);
  624. propertyInfo.SetValue(dataObject, value, null);
  625. }
  626. }
  627. else
  628. {
  629. throw new System.MissingMemberException(string.Format("Can not find a property named {1} in type {0}.", dataObjectType, columnName));
  630. }
  631. }
  632. }
  633. private object ConvertDataValue(System.Data.DbType dbType, Type propertyType, object value)
  634. {
  635. return ConverterManager.ConvertDataValue(dbType, propertyType, value);
  636. }
  637. private object ConvertDataValue(Type propertyType, System.Data.DbType dbType, object value)
  638. {
  639. return ConverterManager.ConvertDataValue(propertyType, dbType, value);
  640. }
  641. /// <summary>
  642. /// FillData item.
  643. /// </summary>
  644. /// <param name="command">Command.</param>
  645. /// <param name="dataTableMapping">Data table mapping.</param>
  646. /// <param name="dataObject">Data object.</param>
  647. /// <param name="primaryKeys">The value of primary key.</param>
  648. /// <param name="columnNames">An array of Columns.</param>
  649. /// <param name="transaction">Database transaction.</param>
  650. /// <returns>The result of execute command.</returns>
  651. protected int Fill(System.Data.IDbCommand command, System.Data.Common.DataTableMapping dataTableMapping, object dataObject, object[] primaryKeys, string[] columnNames, System.Data.IDbTransaction transaction)
  652. {
  653. for (int i = 0; i < command.Parameters.Count; i++)
  654. {
  655. SetParameterValue(command.Parameters[i], primaryKeys[i]);
  656. }
  657. if (transaction != null)
  658. {
  659. command.Transaction = transaction;
  660. }
  661. WriteLog(command);
  662. System.Data.IDataReader dataReader = RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  663. try
  664. {
  665. if (dataReader.Read())
  666. {
  667. if (UseDynamicProxy)
  668. {
  669. #region UseDynamicProxy
  670. System.Type dataObjectType = dataObject.GetType();
  671. IObjectAccessor objectAccessor = GetObjectAccessor(dataObjectType, this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns);
  672. SetDataObjectValues(dataTableMapping, dataObject, columnNames, dataReader, dataObjectType, objectAccessor);
  673. #endregion
  674. }
  675. else
  676. {
  677. if (dataObject is IDataObjectProxy)
  678. {
  679. #region IObjectAccessor
  680. IObjectAccessor objectAccessor = dataObject as IObjectAccessor;
  681. SetDataObjectValues(dataTableMapping, dataObject, columnNames, dataReader, dataObject as IDataObjectProxy, objectAccessor);
  682. #endregion
  683. }
  684. else
  685. {
  686. #region Reflection
  687. System.Type dataObjectType = dataObject.GetType();
  688. SetDataObjectValues(dataTableMapping, dataObject, columnNames, dataReader, dataObjectType);
  689. #endregion
  690. }
  691. }
  692. }
  693. }
  694. finally
  695. {
  696. if (dataReader != null)
  697. {
  698. dataReader.Close();
  699. }
  700. }
  701. return dataReader.RecordsAffected;
  702. }
  703. private void SetDataObjectValues(System.Data.Common.DataTableMapping dataTableMapping, object dataObject, string[] columnNames, System.Data.IDataReader dataReader, System.Type dataObjectType, IObjectAccessor objectAccessor)
  704. {
  705. if (objectAccessor != null)
  706. {
  707. foreach (string columnName in columnNames)
  708. {
  709. DataColumnDefinition dataColumnDefinition = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns[columnName];
  710. string sourceName = RaisingStudio.Data.Common.Builders.CommonCommandBuilder.GetDataColumnSourceColumn(dataTableMapping, columnName);
  711. System.Data.DbType dbType = dataColumnDefinition.DbType;
  712. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceName, dbType);
  713. if (value == System.DBNull.Value)
  714. {
  715. objectAccessor.SetValue(dataObject, columnName, null);
  716. }
  717. else
  718. {
  719. Type propertyType = GetDataObjectPropertyType(dataObjectType, columnName);
  720. value = ConvertDataValue(dbType, propertyType, value);
  721. objectAccessor.SetValue(dataObject, columnName, value);
  722. }
  723. }
  724. }
  725. else
  726. {
  727. // TODO: exception.
  728. throw new ObjectAccessorException(string.Format("Can't get ObjectAccessor for type [{0}].", dataObjectType));
  729. }
  730. }
  731. private void SetDataObjectValues(System.Data.Common.DataTableMapping dataTableMapping, object dataObject, string[] columnNames, System.Data.IDataReader dataReader, IDataObjectProxy proxy, IObjectAccessor objectAccessor)
  732. {
  733. if (objectAccessor != null)
  734. {
  735. foreach (string columnName in columnNames)
  736. {
  737. DataColumnDefinition dataColumnDefinition = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns[columnName];
  738. string sourceName = RaisingStudio.Data.Common.Builders.CommonCommandBuilder.GetDataColumnSourceColumn(dataTableMapping, columnName);
  739. System.Data.DbType dbType = dataColumnDefinition.DbType;
  740. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceName, dbType);
  741. if (value == System.DBNull.Value)
  742. {
  743. objectAccessor.SetValue(dataObject, columnName, null);
  744. }
  745. else
  746. {
  747. Type propertyType = proxy.GetPropertyType(columnName);
  748. value = ConvertDataValue(dbType, propertyType, value);
  749. objectAccessor.SetValue(dataObject, columnName, value);
  750. }
  751. }
  752. }
  753. else
  754. {
  755. // TODO: exception.
  756. throw new ObjectAccessorException(string.Format("Can't get ObjectAccessor for type [{0}].", dataObjectType));
  757. }
  758. }
  759. private void SetDataObjectValues(System.Data.Common.DataTableMapping dataTableMapping, object dataObject, string[] columnNames, System.Data.IDataReader dataReader, System.Type dataObjectType)
  760. {
  761. foreach (string columnName in columnNames)
  762. {
  763. DataColumnDefinition dataColumnDefinition = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns[columnName];
  764. string sourceName = RaisingStudio.Data.Common.Builders.CommonCommandBuilder.GetDataColumnSourceColumn(dataTableMapping, columnName);
  765. System.Data.DbType dbType = dataColumnDefinition.DbType;
  766. System.Reflection.PropertyInfo propertyInfo = dataObjectType.GetProperty(columnName);
  767. if (propertyInfo != null)
  768. {
  769. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceName, dbType);
  770. if (value == System.DBNull.Value)
  771. {
  772. propertyInfo.SetValue(dataObject, null, null);
  773. }
  774. else
  775. {
  776. value = ConvertDataValue(dbType, propertyInfo.PropertyType, value);
  777. propertyInfo.SetValue(dataObject, value, null);
  778. }
  779. }
  780. else
  781. {
  782. throw new System.MissingMemberException(string.Format("Can not find a property named {1} in type {0}.", dataObjectType, columnName));
  783. }
  784. }
  785. }
  786. private System.Data.Common.DataTableMapping _defaultDataTableMapping;
  787. private System.Data.IDbCommand _defalutConditionSelectCommand;
  788. /// <summary>
  789. /// Fill Data object.
  790. /// </summary>
  791. /// <param name="dataObject">Data object.</param>
  792. /// <param name="primaryKeys">The value of primary key.</param>
  793. /// <param name="transaction">Database transaction.</param>
  794. /// <returns>The result of execute command.</returns>
  795. protected virtual int Fill(object dataObject, object[] primaryKeys, System.Data.IDbTransaction transaction)
  796. {
  797. if (CacheDefalutCommand)
  798. {
  799. if (_defalutConditionSelectCommand == null)
  800. {
  801. _defalutConditionSelectCommand = this.CommandBuilder.GetConditionSelectCommand(out _defaultDataTableMapping);
  802. }
  803. System.Data.Common.DataTableMapping dataTableMapping = _defaultDataTableMapping;
  804. System.Data.IDbCommand command = _defalutConditionSelectCommand;
  805. return Fill(command, dataTableMapping, dataObject, primaryKeys, transaction);
  806. }
  807. else
  808. {
  809. System.Data.Common.DataTableMapping dataTableMapping;
  810. System.Data.IDbCommand command = this.CommandBuilder.GetConditionSelectCommand(out dataTableMapping);
  811. return Fill(command, dataTableMapping, dataObject, primaryKeys, transaction);
  812. }
  813. }
  814. /// <summary>
  815. /// Fill Data object.
  816. /// </summary>
  817. /// <param name="dataObject">has primary key value Data object.</param>
  818. /// <param name="transaction">Database transaction.</param>
  819. /// <returns>The result of execute command.</returns>
  820. protected virtual int Fill(object dataObject, System.Data.IDbTransaction transaction)
  821. {
  822. return Fill(dataObject, GetPrimaryKeys(dataObject), transaction);
  823. }
  824. /// <summary>
  825. /// Fill Data object.
  826. /// </summary>
  827. /// <param name="dataObject">Data object.</param>
  828. /// <param name="primaryKeys">The value of primary key.</param>
  829. /// <param name="columnNames">An array of Columns.</param>
  830. /// <param name="transaction">Database transaction.</param>
  831. /// <returns>The result of execute command.</returns>
  832. protected virtual int Fill(object dataObject, object[] primaryKeys, string[] columnNames, System.Data.IDbTransaction transaction)
  833. {
  834. System.Data.Common.DataTableMapping dataTableMapping;
  835. System.Data.IDbCommand command = this.CommandBuilder.GetConditionSelectCommand(columnNames, out dataTableMapping);
  836. return Fill(command, dataTableMapping, dataObject, primaryKeys, columnNames, transaction);
  837. }
  838. /// <summary>
  839. /// Fill Data object.
  840. /// </summary>
  841. /// <param name="dataObject">has primary key value Data object.</param>
  842. /// <param name="columnNames">An array of Columns.</param>
  843. /// <param name="transaction">Database transaction.</param>
  844. /// <returns>The result of execute command.</returns>
  845. protected virtual int Fill(object dataObject, string[] columnNames, System.Data.IDbTransaction transaction)
  846. {
  847. return Fill(dataObject, GetPrimaryKeys(dataObject), columnNames, transaction);
  848. }
  849. /// <summary>
  850. /// Gets Data object.
  851. /// </summary>
  852. /// <param name="primaryKeys">The value of primary key.</param>
  853. /// <param name="transaction">Database transaction.</param>
  854. /// <returns>Data object.</returns>
  855. protected virtual object GetData(object[] primaryKeys, System.Data.IDbTransaction transaction)
  856. {
  857. object dataObject = CreateDataObject();
  858. Fill(dataObject, primaryKeys, transaction);
  859. return dataObject;
  860. }
  861. /// <summary>
  862. /// Gets Data object.
  863. /// </summary>
  864. /// <param name="dataObject">has primary key value Data object.</param>
  865. /// <param name="transaction">Database transaction.</param>
  866. /// <returns>Data object.</returns>
  867. protected virtual object GetData(object dataObject, System.Data.IDbTransaction transaction)
  868. {
  869. Fill(dataObject, transaction);
  870. return dataObject;
  871. }
  872. /// <summary>
  873. /// Gets Data object.
  874. /// </summary>
  875. /// <param name="primaryKeys">The value of primary key.</param>
  876. /// <param name="columnNames">An array of Columns.</param>
  877. /// <param name="transaction">Database transaction.</param>
  878. /// <returns>Data object.</returns>
  879. protected virtual object GetData(object[] primaryKeys, string[] columnNames, System.Data.IDbTransaction transaction)
  880. {
  881. object dataObject = CreateDataObject();
  882. Fill(dataObject, primaryKeys, columnNames, transaction);
  883. return dataObject;
  884. }
  885. /// <summary>
  886. /// Gets Data object.
  887. /// </summary>
  888. /// <param name="dataObject">has primary key value Data object.</param>
  889. /// <param name="columnNames">An array of Columns.</param>
  890. /// <param name="transaction">Database transaction.</param>
  891. /// <returns>Data object.</returns>
  892. protected virtual object GetData(object dataObject, string[] columnNames, System.Data.IDbTransaction transaction)
  893. {
  894. Fill(dataObject, columnNames, transaction);
  895. return dataObject;
  896. }
  897. public static bool GetSourceColumnNullMapping(System.Data.IDbDataParameter parameter)
  898. {
  899. return DataParameterManager.GetSourceColumnNullMapping(parameter);
  900. }
  901. private System.Data.IDbCommand _defalutInsertCommand;
  902. /// <summary>
  903. /// Insert Data object.
  904. /// </summary>
  905. /// <param name="dataObject">Data object.</param>
  906. /// <param name="transaction">Database transaction.</param>
  907. /// <returns>The count of rows that updated.</returns>
  908. protected virtual int Insert(object dataObject, System.Data.IDbTransaction transaction)
  909. {
  910. System.Data.IDbCommand command = null;
  911. if (CacheDefalutCommand)
  912. {
  913. if (_defalutInsertCommand == null)
  914. {
  915. _defalutInsertCommand = this.CommandBuilder.GetInsertCommand(this.DefaultDataTableMapping, false);
  916. }
  917. command = _defalutInsertCommand;
  918. }
  919. else
  920. {
  921. command = this.CommandBuilder.GetInsertCommand(this.DefaultDataTableMapping, false);
  922. }
  923. SetInsertCommandParameterValues(dataObject, command);
  924. if (transaction != null)
  925. {
  926. command.Transaction = transaction;
  927. }
  928. WriteLog(command);
  929. return RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(command);
  930. }
  931. private void SetInsertCommandParameterValues(object dataObject, System.Data.IDbCommand command)
  932. {
  933. if (UseDynamicProxy)
  934. {
  935. #region UseDynamicProxy
  936. System.Type dataObjectType = dataObject.GetType();
  937. IObjectAccessor objectAccessor = GetObjectAccessor(dataObjectType, this.DefaultDataTableMapping.ColumnMappings);
  938. SetParameterValues(dataObject, command, dataObjectType, objectAccessor, true);
  939. #endregion
  940. }
  941. else
  942. {
  943. if (dataObject is IDataObjectProxy)
  944. {
  945. #region IObjectAccessor
  946. IObjectAccessor objectAccessor = dataObject as IObjectAccessor;
  947. SetParameterValues(dataObject, command, dataObject as IDataObjectProxy, objectAccessor, true);
  948. #endregion
  949. }
  950. else
  951. {
  952. #region Reflection
  953. System.Type dataObjectType = dataObject.GetType();
  954. SetParameterValues(dataObject, command, dataObjectType, true);
  955. #endregion
  956. }
  957. }
  958. }
  959. private void SetParameterValues(object dataObject, System.Data.IDbCommand command, System.Type dataObjectType, IObjectAccessor objectAccessor, bool currentVersion)
  960. {
  961. if (objectAccessor != null)
  962. {
  963. foreach (System.Data.IDbDataParameter parameter in command.Parameters)
  964. {
  965. if ((!GetSourceColumnNullMapping(parameter)) && (( currentVersion && (parameter.SourceVersion == System.Data.DataRowVersion.Current)) || (!currentVersion)))
  966. {
  967. string columnName = parameter.SourceColumn;
  968. object value = objectAccessor.GetValue(dataObject, columnName);
  969. if (value == null)
  970. {
  971. parameter.Value = System.DBNull.Value;
  972. }
  973. else
  974. {
  975. Type propertyType = GetDataObjectPropertyType(dataObjectType, columnName);
  976. value = ConvertDataValue(propertyType, parameter.DbType, value);
  977. parameter.Value = value;
  978. }
  979. }
  980. }
  981. }
  982. else
  983. {
  984. // TODO: exception.
  985. throw new ObjectAccessorException(string.Format("Can't get ObjectAccessor for type [{0}].", dataObjectType));
  986. }
  987. }
  988. private void SetParameterValues(object dataObject, System.Data.IDbCommand command, IDataObjectProxy proxy, IObjectAccessor objectAccessor, bool currentVersion)
  989. {
  990. if (objectAccessor != null)
  991. {
  992. foreach (System.Data.IDbDataParameter parameter in command.Parameters)
  993. {
  994. if ((!GetSourceColumnNullMapping(parameter)) && ((currentVersion && (parameter.SourceVersion == System.Data.DataRowVersion.Current)) || (!currentVersion)))
  995. {
  996. string columnName = parameter.SourceColumn;
  997. object value = objectAccessor.GetValue(dataObject, columnName);
  998. if (value == null)
  999. {
  1000. parameter.Value = System.DBNull.Value;
  1001. }
  1002. else
  1003. {
  1004. Type propertyType = proxy.GetPropertyType(columnName);
  1005. value = ConvertDataValue(propertyType, parameter.DbType, value);
  1006. parameter.Value = value;
  1007. }
  1008. }
  1009. }
  1010. }
  1011. else
  1012. {
  1013. // TODO: exception.
  1014. throw new ObjectAccessorException(string.Format("Can't get ObjectAccessor for type [{0}].", dataObjectType));
  1015. }
  1016. }
  1017. private void SetParameterValues(object dataObject, System.Data.IDbCommand command, System.Type dataObjectType, bool currentVersion)
  1018. {
  1019. foreach (System.Data.IDbDataParameter parameter in command.Parameters)
  1020. {
  1021. if ((!GetSourceColumnNullMapping(parameter)) && ((currentVersion && (parameter.SourceVersion == System.Data.DataRowVersion.Current)) || (!currentVersion)))
  1022. {
  1023. string columnName = parameter.SourceColumn;
  1024. System.Reflection.PropertyInfo propertyInfo = dataObjectType.GetProperty(columnName);
  1025. if (propertyInfo != null)
  1026. {
  1027. object value = propertyInfo.GetValue(dataObject, null);
  1028. if (value == null)
  1029. {
  1030. parameter.Value = System.DBNull.Value;
  1031. }
  1032. else
  1033. {
  1034. value = ConvertDataValue(propertyInfo.PropertyType, parameter.DbType, value);
  1035. parameter.Value = value;
  1036. }
  1037. }
  1038. else
  1039. {
  1040. throw new System.MissingMemberException(string.Format("Can not find a property named {1} in type {0}.", dataObjectType, columnName));
  1041. }
  1042. }
  1043. }
  1044. }
  1045. /// <summary>
  1046. /// Insert Data object.
  1047. /// </summary>
  1048. /// <param name="dataObject">Data object.</param>
  1049. /// <param name="columnNames">An array of Columns.</param>
  1050. /// <param name="transaction">Database transaction.</param>
  1051. /// <returns>The count of rows that updated.</returns>
  1052. protected virtual int Insert(object dataObject, string[] columnNames, System.Data.IDbTransaction transaction)
  1053. {
  1054. System.Data.Common.DataTableMapping dataTableMapping = this.CommandBuilder.CommonCommandBuilder.GetDataTableMapping(columnNames);
  1055. System.Data.IDbCommand command = this.CommandBuilder.GetInsertCommand(dataTableMapping, false);
  1056. SetInsertCommandParameterValues(dataObject, command);
  1057. if (transaction != null)
  1058. {
  1059. command.Transaction = transaction;
  1060. }
  1061. WriteLog(command);
  1062. return RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(command);
  1063. }
  1064. /// <summary>
  1065. /// Delete Data object.
  1066. /// </summary>
  1067. /// <param name="dataObject">Data object.</param>
  1068. /// <param name="transaction">Database transaction.</param>
  1069. /// <returns>The count of rows that updated.</returns>
  1070. protected virtual int Delete(object dataObject, System.Data.IDbTransaction transaction)
  1071. {
  1072. object[] primaryKeys = GetPrimaryKeys(dataObject);
  1073. return Delete(primaryKeys, transaction);
  1074. }
  1075. System.Data.IDbCommand _defaultDeleteCommand;
  1076. /// <summary>
  1077. /// Delete Data object.
  1078. /// </summary>
  1079. /// <param name="primaryKeys">The value of primary key.</param>
  1080. /// <param name="transaction">Database transaction.</param>
  1081. /// <returns>The count of rows that updated.</returns>
  1082. protected virtual int Delete(object[] primaryKeys, System.Data.IDbTransaction transaction)
  1083. {
  1084. System.Data.IDbCommand command = null;
  1085. if (CacheDefalutCommand)
  1086. {
  1087. if (_defaultDeleteCommand == null)
  1088. {
  1089. _defaultDeleteCommand = this.CommandBuilder.GetDeleteCommand(this.DefaultDataTableMapping, false);
  1090. }
  1091. command = _defaultDeleteCommand;
  1092. }
  1093. else
  1094. {
  1095. command = this.CommandBuilder.GetDeleteCommand(this.DefaultDataTableMapping, false);
  1096. }
  1097. int i = 0;
  1098. foreach (System.Data.IDbDataParameter parameter in command.Parameters)
  1099. {
  1100. parameter.Value = primaryKeys[i];
  1101. i++;
  1102. }
  1103. if (transaction != null)
  1104. {
  1105. command.Transaction = transaction;
  1106. }
  1107. WriteLog(command);
  1108. return RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(command);
  1109. }
  1110. private System.Data.IDbCommand _defalutUpdateCommand;
  1111. /// <summary>
  1112. /// Update Data object.
  1113. /// </summary>
  1114. /// <param name="dataTableMapping">Data table mapping.</param>
  1115. /// <param name="dataObject">Data object.</param>
  1116. /// <param name="transaction">Database transaction.</param>
  1117. /// <returns>The count of rows that updated.</returns>
  1118. protected virtual int Update(System.Data.Common.DataTableMapping dataTableMapping, object dataObject, System.Data.IDbTransaction transaction)
  1119. {
  1120. System.Data.IDbCommand command = this.CommandBuilder.GetUpdateCommand(dataTableMapping, false, false);
  1121. SetUpdateCommandParameterValues(dataObject, command);
  1122. if (transaction != null)
  1123. {
  1124. command.Transaction = transaction;
  1125. }
  1126. WriteLog(command);
  1127. return RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(command);
  1128. }
  1129. private void SetUpdateCommandParameterValues(object dataObject, System.Data.IDbCommand command)
  1130. {
  1131. if (UseDynamicProxy)
  1132. {
  1133. #region UseDynamicProxy
  1134. System.Type dataObjectType = dataObject.GetType();
  1135. IObjectAccessor objectAccessor = GetObjectAccessor(dataObjectType, this.DefaultDataTableMapping.ColumnMappings);
  1136. SetParameterValues(dataObject, command, dataObjectType, objectAccessor, false);
  1137. #endregion
  1138. }
  1139. else
  1140. {
  1141. if (dataObject is IDataObjectProxy)
  1142. {
  1143. #region IObjectAccessor
  1144. IObjectAccessor objectAccessor = dataObject as IObjectAccessor;
  1145. SetParameterValues(dataObject, command, dataObject as IDataObjectProxy, objectAccessor, false);
  1146. #endregion
  1147. }
  1148. else
  1149. {
  1150. #region Reflection
  1151. System.Type dataObjectType = dataObject.GetType();
  1152. SetParameterValues(dataObject, command, dataObjectType, false);
  1153. #endregion
  1154. }
  1155. }
  1156. }
  1157. /// <summary>
  1158. /// Update Data object.
  1159. /// </summary>
  1160. /// <param name="dataTableMapping">Data table mapping.</param>
  1161. /// <param name="primaryKeys">The value of primary key.</param>
  1162. /// <param name="dataObject">Data object.</param>
  1163. /// <param name="transaction">Database transaction.</param>
  1164. /// <returns>The count of rows that updated.</returns>
  1165. protected virtual int Update(System.Data.Common.DataTableMapping dataTableMapping, object[] primaryKeys, object dataObject, System.Data.IDbTransaction transaction)
  1166. {
  1167. System.Data.IDbCommand command = this.CommandBuilder.GetUpdateCommand(dataTableMapping, false, false);
  1168. if (UseDynamicProxy)
  1169. {
  1170. #region UseDynamicProxy
  1171. System.Type dataObjectType = dataObject.GetType();
  1172. IObjectAccessor objectAccessor = GetObjectAccessor(dataObjectType, this.DefaultDataTableMapping.ColumnMappings);
  1173. SetParameterValues(primaryKeys, dataObject, command, dataObjectType, objectAccessor);
  1174. #endregion
  1175. }
  1176. else
  1177. {
  1178. if (dataObject is IDataObjectProxy)
  1179. {
  1180. #region IObjectAccessor
  1181. IObjectAccessor objectAccessor = dataObject as IObjectAccessor;
  1182. SetParameterValues(primaryKeys, dataObject, command, dataObject as IDataObjectProxy, objectAccessor);
  1183. #endregion
  1184. }
  1185. else
  1186. {
  1187. #region Reflection
  1188. System.Type dataObjectType = dataObject.GetType();
  1189. SetParameterValues(primaryKeys, dataObject, command, dataObjectType);
  1190. #endregion
  1191. }
  1192. }
  1193. if (transaction != null)
  1194. {
  1195. command.Transaction = transaction;
  1196. }
  1197. WriteLog(command);
  1198. return RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(command);
  1199. }
  1200. private void SetParameterValues(object[] primaryKeys, object dataObject, System.Data.IDbCommand command, System.Type dataObjectType)
  1201. {
  1202. int i = 0;
  1203. foreach (System.Data.IDbDataParameter parameter in command.Parameters)
  1204. {
  1205. if (!GetSourceColumnNullMapping(parameter))
  1206. {
  1207. if (parameter.SourceVersion == System.Data.DataRowVersion.Original)
  1208. {
  1209. parameter.Value = primaryKeys[i];
  1210. i++;
  1211. }
  1212. else
  1213. {
  1214. string columnName = parameter.SourceColumn;
  1215. System.Reflection.PropertyInfo propertyInfo = dataObjectType.GetProperty(columnName);
  1216. if (propertyInfo != null)
  1217. {
  1218. object value = propertyInfo.GetValue(dataObject, null);
  1219. if (value == null)
  1220. {
  1221. parameter.Value = System.DBNull.Value;
  1222. }
  1223. else
  1224. {
  1225. value = ConvertDataValue(propertyInfo.PropertyType, parameter.DbType, value);
  1226. parameter.Value = value;
  1227. }
  1228. }
  1229. else
  1230. {
  1231. throw new System.MissingMemberException(string.Format("Can not find a property named {1} in type {0}.", dataObjectType, columnName));
  1232. }
  1233. }
  1234. }
  1235. }
  1236. }
  1237. private void SetParameterValues(object[] primaryKeys, object dataObject, System.Data.IDbCommand command, System.Type dataObjectType, IObjectAccessor objectAccessor)
  1238. {
  1239. int i = 0;
  1240. if (objectAccessor != null)
  1241. {
  1242. foreach (System.Data.IDbDataParameter parameter in command.Parameters)
  1243. {
  1244. if (!GetSourceColumnNullMapping(parameter))
  1245. {
  1246. if (parameter.SourceVersion == System.Data.DataRowVersion.Original)
  1247. {
  1248. parameter.Value = primaryKeys[i];
  1249. i++;
  1250. }
  1251. else
  1252. {
  1253. string columnName = parameter.SourceColumn;
  1254. object value = objectAccessor.GetValue(dataObject, columnName);
  1255. if (value == null)
  1256. {
  1257. parameter.Value = System.DBNull.Value;
  1258. }
  1259. else
  1260. {
  1261. Type propertyType = GetDataObjectPropertyType(dataObjectType, columnName);
  1262. value = ConvertDataValue(propertyType, parameter.DbType, value);
  1263. parameter.Value = value;
  1264. }
  1265. }
  1266. }
  1267. }
  1268. }
  1269. else
  1270. {
  1271. // TODO: exception.
  1272. throw new ObjectAccessorException(string.Format("Can't get ObjectAccessor for type [{0}].", dataObjectType));
  1273. }
  1274. }
  1275. private void SetParameterValues(object[] primaryKeys, object dataObject, System.Data.IDbCommand command, IDataObjectProxy proxy, IObjectAccessor objectAccessor)
  1276. {
  1277. int i = 0;
  1278. if (objectAccessor != null)
  1279. {
  1280. foreach (System.Data.IDbDataParameter parameter in command.Parameters)
  1281. {
  1282. if (!GetSourceColumnNullMapping(parameter))
  1283. {
  1284. if (parameter.SourceVersion == System.Data.DataRowVersion.Original)
  1285. {
  1286. parameter.Value = primaryKeys[i];
  1287. i++;
  1288. }
  1289. else
  1290. {
  1291. string columnName = parameter.SourceColumn;
  1292. object value = objectAccessor.GetValue(dataObject, columnName);
  1293. if (value == null)
  1294. {
  1295. parameter.Value = System.DBNull.Value;
  1296. }
  1297. else
  1298. {
  1299. Type propertyType = proxy.GetPropertyType(columnName);
  1300. value = ConvertDataValue(propertyType, parameter.DbType, value);
  1301. parameter.Value = value;
  1302. }
  1303. }
  1304. }
  1305. }
  1306. }
  1307. else
  1308. {
  1309. // TODO: exception.
  1310. throw new ObjectAccessorException(string.Format("Can't get ObjectAccessor for type [{0}].", dataObjectType));
  1311. }
  1312. }
  1313. /// <summary>
  1314. /// Update Data object.
  1315. /// </summary>
  1316. /// <param name="dataObject">Data object.</param>
  1317. /// <param name="transaction">Database transaction.</param>
  1318. /// <returns>The count of rows that updated.</returns>
  1319. protected virtual int Update(object dataObject, System.Data.IDbTransaction transaction)
  1320. {
  1321. System.Data.IDbCommand command = null;
  1322. if (CacheDefalutCommand)
  1323. {
  1324. if (_defalutUpdateCommand == null)
  1325. {
  1326. _defalutUpdateCommand = this.CommandBuilder.GetUpdateCommand(this.DefaultDataTableMapping, false, false);
  1327. }
  1328. command = _defalutUpdateCommand;
  1329. }
  1330. else
  1331. {
  1332. command = this.CommandBuilder.GetUpdateCommand(this.DefaultDataTableMapping, false, false);
  1333. }
  1334. SetUpdateCommandParameterValues(dataObject, command);
  1335. if (transaction != null)
  1336. {
  1337. command.Transaction = transaction;
  1338. }
  1339. WriteLog(command);
  1340. return RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(command);
  1341. }
  1342. /// <summary>
  1343. /// Update Data object.
  1344. /// </summary>
  1345. /// <param name="primaryKeys">The value of primary key.</param>
  1346. /// <param name="dataObject">Data object.</param>
  1347. /// <param name="transaction">Database transaction.</param>
  1348. /// <returns>The count of rows that updated.</returns>
  1349. protected virtual int Update(object[] primaryKeys, object dataObject, System.Data.IDbTransaction transaction)
  1350. {
  1351. System.Data.IDbCommand command = null;
  1352. if (CacheDefalutCommand)
  1353. {
  1354. if (_defalutUpdateCommand == null)
  1355. {
  1356. _defalutUpdateCommand = this.CommandBuilder.GetUpdateCommand(this.DefaultDataTableMapping, false, false);
  1357. }
  1358. command = _defalutUpdateCommand;
  1359. }
  1360. else
  1361. {
  1362. command = this.CommandBuilder.GetUpdateCommand(this.DefaultDataTableMapping, false, false);
  1363. }
  1364. if (UseDynamicProxy)
  1365. {
  1366. #region UseDynamicProxy
  1367. System.Type dataObjectType = dataObject.GetType();
  1368. IObjectAccessor objectAccessor = GetObjectAccessor(dataObjectType, this.DefaultDataTableMapping.ColumnMappings);
  1369. SetParameterValues(primaryKeys, dataObject, command, dataObjectType, objectAccessor);
  1370. #endregion
  1371. }
  1372. else
  1373. {
  1374. if (dataObject is IDataObjectProxy)
  1375. {
  1376. #region IObjectAccessor
  1377. IObjectAccessor objectAccessor = dataObject as IObjectAccessor;
  1378. SetParameterValues(primaryKeys, dataObject, command, dataObject as IDataObjectProxy, objectAccessor);
  1379. #endregion
  1380. }
  1381. else
  1382. {
  1383. #region Reflection
  1384. System.Type dataObjectType = dataObject.GetType();
  1385. SetParameterValues(primaryKeys, dataObject, command, dataObjectType);
  1386. #endregion
  1387. }
  1388. }
  1389. if (transaction != null)
  1390. {
  1391. command.Transaction = transaction;
  1392. }
  1393. WriteLog(command);
  1394. return RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(command);
  1395. }
  1396. /// <summary>
  1397. /// Update Data object.
  1398. /// </summary>
  1399. /// <param name="dataObject">Data object.</param>
  1400. /// <param name="columnNames">An array of Columns.</param>
  1401. /// <param name="transaction">Database transaction.</param>
  1402. /// <returns>The count of rows that updated.</returns>
  1403. protected virtual int Update(object dataObject, string[] columnNames, System.Data.IDbTransaction transaction)
  1404. {
  1405. System.Data.Common.DataTableMapping dataTableMapping = this.CommandBuilder.CommonCommandBuilder.GetDataTableMapping(columnNames);
  1406. return Update(dataTableMapping, dataObject, transaction);
  1407. }
  1408. /// <summary>
  1409. /// Update Data object.
  1410. /// </summary>
  1411. /// <param name="primaryKeys">The value of primary key.</param>
  1412. /// <param name="dataObject">Data object.</param>
  1413. /// <param name="columnNames">An array of Columns.</param>
  1414. /// <param name="transaction">Database transaction.</param>
  1415. /// <returns>The count of rows that updated.</returns>
  1416. protected virtual int Update(object[] primaryKeys, object dataObject, string[] columnNames, System.Data.IDbTransaction transaction)
  1417. {
  1418. System.Data.Common.DataTableMapping dataTableMapping = this.CommandBuilder.CommonCommandBuilder.GetDataTableMapping(columnNames);
  1419. return Update(dataTableMapping, primaryKeys, dataObject, transaction);
  1420. }
  1421. /// <summary>
  1422. /// Check data object by primary key.
  1423. /// </summary>
  1424. /// <param name="dataObject">Data object.</param>
  1425. /// <param name="transaction">Database transaction.</param>
  1426. /// <returns>If exists then return true, otherwise return false.</returns>
  1427. protected virtual bool Exists(object dataObject, System.Data.IDbTransaction transaction)
  1428. {
  1429. object[] primaryKeys = GetPrimaryKeys(dataObject);
  1430. return Exists(primaryKeys, transaction);
  1431. }
  1432. private System.Data.IDbCommand _defaultExistsCommand;
  1433. /// <summary>
  1434. /// Check data object by primary key.
  1435. /// </summary>
  1436. /// <param name="primaryKeys">The value of primary key.</param>
  1437. /// <param name="transaction">Database transaction.</param>
  1438. /// <returns>If exists then return true, otherwise return false.</returns>
  1439. protected virtual bool Exists(object[] primaryKeys, System.Data.IDbTransaction transaction)
  1440. {
  1441. System.Data.IDbCommand command = null;
  1442. if (CacheDefalutCommand)
  1443. {
  1444. if (_defaultExistsCommand == null)
  1445. {
  1446. _defaultExistsCommand = this.CommandBuilder.GetExistsCommand(this.DefaultDataTableMapping);
  1447. }
  1448. command = _defaultExistsCommand;
  1449. }
  1450. else
  1451. {
  1452. command = this.CommandBuilder.GetExistsCommand(this.DefaultDataTableMapping);
  1453. }
  1454. int i = 0;
  1455. foreach (System.Data.IDbDataParameter parameter in command.Parameters)
  1456. {
  1457. parameter.Value = primaryKeys[i];
  1458. i++;
  1459. }
  1460. if (transaction != null)
  1461. {
  1462. command.Transaction = transaction;
  1463. }
  1464. WriteLog(command);
  1465. int count = Convert.ToInt32(RaisingStudio.Data.Common.Database.ExecuteScalarCommand(command));
  1466. return (count > 0) ? true : false;
  1467. }
  1468. /// <summary>
  1469. /// Save Data object.
  1470. /// </summary>
  1471. /// <param name="dataObject">Data object.</param>
  1472. /// <param name="transaction">Database transaction.</param>
  1473. /// <returns>The count of rows that updated.</returns>
  1474. protected virtual int Save(object dataObject, System.Data.IDbTransaction transaction)
  1475. {
  1476. if (Exists(dataObject, transaction))
  1477. {
  1478. return Update(dataObject, transaction);
  1479. }
  1480. else
  1481. {
  1482. return Insert(dataObject, transaction);
  1483. }
  1484. }
  1485. /// <summary>
  1486. /// Save Data object.
  1487. /// </summary>
  1488. /// <param name="dataObject">Data object.</param>
  1489. /// <param name="columnNames">An array of Columns.</param>
  1490. /// <param name="transaction">Database transaction.</param>
  1491. /// <returns>The count of rows that updated.</returns>
  1492. protected virtual int Save(object dataObject, string[] columnNames, System.Data.IDbTransaction transaction)
  1493. {
  1494. if (Exists(dataObject, transaction))
  1495. {
  1496. return Update(dataObject, columnNames, transaction);
  1497. }
  1498. else
  1499. {
  1500. return Insert(dataObject, columnNames, transaction);
  1501. }
  1502. }
  1503. #region Batch Operation
  1504. /// <summary>
  1505. /// Filldata object column table.
  1506. /// </summary>
  1507. /// <param name="command">Command.</param>
  1508. /// <param name="dataObjectList">data object column table.</param>
  1509. /// <param name="columnNames">column name column table.</param>
  1510. /// <param name="propertyInfos">property info dictionary.</param>
  1511. /// <param name="sourceNames">source name dictionary.</param>
  1512. /// <param name="dbTypes">data type dictionary.</param>
  1513. /// <returns>The result of execute command.</returns>
  1514. public int FillDataObjectList(System.Data.IDbCommand command, System.Collections.IList dataObjectList, System.Collections.IList columnNames, Dictionary<string, System.Reflection.PropertyInfo> propertyInfos, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes)
  1515. {
  1516. WriteLog(command);
  1517. System.Data.IDataReader dataReader = RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  1518. int index = 0;
  1519. try
  1520. {
  1521. while (dataReader.Read())
  1522. {
  1523. object dataObject = CreateDataObject();
  1524. SetDataObjectValues(columnNames, propertyInfos, propertyConverters, sourceNames, dbTypes, dataReader, dataObject);
  1525. dataObjectList.Add(dataObject);
  1526. index++;
  1527. }
  1528. }
  1529. finally
  1530. {
  1531. if (dataReader != null)
  1532. {
  1533. dataReader.Close();
  1534. }
  1535. }
  1536. return index;
  1537. }
  1538. public void SetDataObjectValues(System.Collections.IList columnNames, Dictionary<string, System.Reflection.PropertyInfo> propertyInfos, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes, System.Data.IDataReader dataReader, object dataObject)
  1539. {
  1540. foreach (string columnName in columnNames)
  1541. {
  1542. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceNames[columnName], dbTypes[columnName]);
  1543. if (value == System.DBNull.Value)
  1544. {
  1545. propertyInfos[columnName].SetValue(dataObject, null, null);
  1546. }
  1547. else
  1548. {
  1549. if (propertyConverters[columnName] != null)
  1550. {
  1551. value = propertyConverters[columnName](value);
  1552. }
  1553. propertyInfos[columnName].SetValue(dataObject, value, null);
  1554. }
  1555. }
  1556. }
  1557. /// <summary>
  1558. /// Filldata object column table.
  1559. /// </summary>
  1560. /// <param name="command">Command.</param>
  1561. /// <param name="dataTableMapping">Data table mapping.</param>
  1562. /// <param name="dataObjectList">data object column table.</param>
  1563. /// <returns>The result of execute command.</returns>
  1564. public int FillDataObjectList(System.Data.IDbCommand command, System.Data.Common.DataTableMapping dataTableMapping, out System.Collections.IList dataObjectList)
  1565. {
  1566. if (UseDynamicProxy)
  1567. {
  1568. dataObjectList = CreateDataObjectList();
  1569. List<string> columnNames;
  1570. IObjectAccessor objectAccessor;
  1571. Dictionary<string, string> sourceNames;
  1572. Dictionary<string, System.Data.DbType> dbTypes;
  1573. Dictionary<string, DataConverter> propertyConverters;
  1574. BuildMappingInfo(dataTableMapping, out columnNames, out objectAccessor, out propertyConverters, out sourceNames, out dbTypes);
  1575. return FillDataObjectList(command, dataObjectList, columnNames, objectAccessor, propertyConverters, sourceNames, dbTypes);
  1576. }
  1577. else
  1578. {
  1579. if ((typeof(IDataObjectProxy)).IsAssignableFrom(this.dataObjectType))
  1580. {
  1581. // proxy.
  1582. IDataObjectProxy proxy = System.Activator.CreateInstance(this.dataObjectType) as IDataObjectProxy;
  1583. dataObjectList = proxy.CreateObjectList();
  1584. List<string> columnNames;
  1585. Dictionary<string, string> sourceNames;
  1586. Dictionary<string, System.Data.DbType> dbTypes;
  1587. Dictionary<string, DataConverter> propertyConverters;
  1588. BuildMappingInfo(dataTableMapping, out columnNames, proxy, out propertyConverters, out sourceNames, out dbTypes);
  1589. return FillDataObjectList(command, dataObjectList, columnNames, proxy, propertyConverters, sourceNames, dbTypes);
  1590. }
  1591. else
  1592. {
  1593. dataObjectList = CreateDataObjectList();
  1594. List<string> columnNames;
  1595. Dictionary<string, System.Reflection.PropertyInfo> propertyInfos;
  1596. Dictionary<string, string> sourceNames;
  1597. Dictionary<string, System.Data.DbType> dbTypes;
  1598. Dictionary<string, DataConverter> propertyConverters;
  1599. BuildMappingInfo(dataTableMapping, out columnNames, out propertyInfos, out propertyConverters, out sourceNames, out dbTypes);
  1600. return FillDataObjectList(command, dataObjectList, columnNames, propertyInfos, propertyConverters, sourceNames, dbTypes);
  1601. }
  1602. }
  1603. }
  1604. /// <summary>
  1605. /// Create mapping infomation.
  1606. /// </summary>
  1607. /// <param name="dataTableMapping">Data table mapping.</param>
  1608. /// <param name="columnNames">column name column table.</param>
  1609. /// <param name="propertyInfos">property info dictionary.</param>
  1610. /// <param name="sourceNames">source name dictionary.</param>
  1611. /// <param name="dbTypes">data type dictionary.</param>
  1612. public void BuildMappingInfo(System.Data.Common.DataTableMapping dataTableMapping, out List<string> columnNames, out Dictionary<string, System.Reflection.PropertyInfo> propertyInfos, out Dictionary<string, DataConverter> propertyConverters, out Dictionary<string, string> sourceNames, out Dictionary<string, System.Data.DbType> dbTypes)
  1613. {
  1614. columnNames = new List<string>();
  1615. propertyInfos = new Dictionary<string, System.Reflection.PropertyInfo>();
  1616. propertyConverters = new Dictionary<string, DataConverter>();
  1617. sourceNames = new Dictionary<string, string>();
  1618. dbTypes = new Dictionary<string, System.Data.DbType>();
  1619. foreach (System.Data.Common.DataColumnMapping dataColumnMapping in dataTableMapping.ColumnMappings)
  1620. {
  1621. string columnName = dataColumnMapping.DataSetColumn;
  1622. System.Reflection.PropertyInfo propertyInfo = this.dataObjectType.GetProperty(columnName);
  1623. if (propertyInfo != null)
  1624. {
  1625. propertyInfos.Add(columnName, propertyInfo);
  1626. }
  1627. else
  1628. {
  1629. throw new System.MissingMemberException(string.Format("Can not find a property named {1} in type {0}.", dataObjectType, columnName));
  1630. }
  1631. columnNames.Add(columnName);
  1632. string sourceName = dataColumnMapping.SourceColumn;
  1633. DataColumnDefinition dataColumnDefinition = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns[columnName];
  1634. System.Data.DbType dbType = dataColumnDefinition.DbType;
  1635. sourceNames.Add(columnName, sourceName);
  1636. dbTypes.Add(columnName, dbType);
  1637. propertyConverters.Add(columnName, GetDataConverter(dbType, propertyInfo.PropertyType));
  1638. }
  1639. }
  1640. private DataConverter GetDataConverter(System.Data.DbType dbType, Type type)
  1641. {
  1642. return ConverterManager.GetDataConverter(dbType, type);
  1643. }
  1644. /// <summary>
  1645. /// Filldata object column table.
  1646. /// </summary>
  1647. /// <param name="command">Command.</param>
  1648. /// <param name="dataTableMapping">Data table mapping.</param>
  1649. /// <param name="columnNames">An array of Columns.</param>
  1650. /// <param name="dataItemList">data object column table.</param>
  1651. /// <returns>The result of execute command.</returns>
  1652. public int FillDataObjectList(System.Data.IDbCommand command, System.Data.Common.DataTableMapping dataTableMapping, string[] columnNames, out System.Collections.IList dataObjectList)
  1653. {
  1654. if (UseDynamicProxy)
  1655. {
  1656. dataObjectList = CreateDataObjectList();
  1657. IObjectAccessor objectAccessor;
  1658. Dictionary<string, string> sourceNames;
  1659. Dictionary<string, System.Data.DbType> dbTypes;
  1660. Dictionary<string, DataConverter> propertyConverters;
  1661. BuildMappingInfo(dataTableMapping, columnNames, out objectAccessor, out propertyConverters, out sourceNames, out dbTypes);
  1662. return FillDataObjectList(command, dataObjectList, columnNames, objectAccessor, propertyConverters, sourceNames, dbTypes);
  1663. }
  1664. else
  1665. {
  1666. if ((typeof(IDataObjectProxy)).IsAssignableFrom(this.dataObjectType))
  1667. {
  1668. // proxy.
  1669. IDataObjectProxy proxy = System.Activator.CreateInstance(this.dataObjectType) as IDataObjectProxy;
  1670. dataObjectList = proxy.CreateObjectList();
  1671. Dictionary<string, string> sourceNames;
  1672. Dictionary<string, System.Data.DbType> dbTypes;
  1673. Dictionary<string, DataConverter> propertyConverters;
  1674. BuildMappingInfo(dataTableMapping, columnNames, proxy, out propertyConverters, out sourceNames, out dbTypes);
  1675. return FillDataObjectList(command, dataObjectList, columnNames, proxy, propertyConverters, sourceNames, dbTypes);
  1676. }
  1677. else
  1678. {
  1679. dataObjectList = CreateDataObjectList();
  1680. Dictionary<string, System.Reflection.PropertyInfo> propertyInfos;
  1681. Dictionary<string, string> sourceNames;
  1682. Dictionary<string, System.Data.DbType> dbTypes;
  1683. Dictionary<string, DataConverter> propertyConverters;
  1684. BuildMappingInfo(dataTableMapping, columnNames, out propertyInfos, out propertyConverters, out sourceNames, out dbTypes);
  1685. return FillDataObjectList(command, dataObjectList, columnNames, propertyInfos, propertyConverters, sourceNames, dbTypes);
  1686. }
  1687. }
  1688. }
  1689. /// <summary>
  1690. /// Create mapping infomation.
  1691. /// </summary>
  1692. /// <param name="dataTableMapping">Data table mapping.</param>
  1693. /// <param name="columnNames">An array of Columns.</param>
  1694. /// <param name="propertyInfos">property info dictionary.</param>
  1695. /// <param name="sourceNames">source name dictionary.</param>
  1696. /// <param name="dbTypes">data type dictionary.</param>
  1697. private void BuildMappingInfo(System.Data.Common.DataTableMapping dataTableMapping, string[] columnNames, out Dictionary<string, System.Reflection.PropertyInfo> propertyInfos, out Dictionary<string, DataConverter> propertyConverters, out Dictionary<string, string> sourceNames, out Dictionary<string, System.Data.DbType> dbTypes)
  1698. {
  1699. propertyInfos = new Dictionary<string, System.Reflection.PropertyInfo>();
  1700. propertyConverters = new Dictionary<string, DataConverter>();
  1701. sourceNames = new Dictionary<string, string>();
  1702. dbTypes = new Dictionary<string, System.Data.DbType>();
  1703. foreach (string columnName in columnNames)
  1704. {
  1705. System.Reflection.PropertyInfo propertyInfo = this.dataObjectType.GetProperty(columnName);
  1706. if (propertyInfo != null)
  1707. {
  1708. propertyInfos.Add(columnName, propertyInfo);
  1709. }
  1710. else
  1711. {
  1712. throw new System.MissingMemberException(string.Format("Can not find a property named {1} in type {0}.", dataObjectType, columnName));
  1713. }
  1714. DataColumnDefinition dataColumnDefinition = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns[columnName];
  1715. string sourceName = RaisingStudio.Data.Common.Builders.CommonCommandBuilder.GetDataColumnSourceColumn(dataTableMapping, columnName);
  1716. System.Data.DbType dbType = dataColumnDefinition.DbType;
  1717. sourceNames.Add(columnName, sourceName);
  1718. dbTypes.Add(columnName, dbType);
  1719. propertyConverters.Add(columnName, GetDataConverter(dbType, propertyInfo.PropertyType));
  1720. }
  1721. }
  1722. /// <summary>
  1723. /// Gets data object column table.
  1724. /// </summary>
  1725. /// <param name="transaction">Database transaction.</param>
  1726. /// <returns>data object column table.</returns>
  1727. protected virtual System.Collections.IList GetDataList(System.Data.IDbTransaction transaction)
  1728. {
  1729. System.Data.Common.DataTableMapping dataTableMapping;
  1730. System.Data.IDbCommand command = null;
  1731. if (CacheDefalutCommand)
  1732. {
  1733. if (_defalutSelectCommand == null)
  1734. {
  1735. _defalutSelectCommand = this.CommandBuilder.GetSelectCommand(out _defaultDataTableMapping);
  1736. }
  1737. dataTableMapping = _defaultDataTableMapping;
  1738. command = _defalutSelectCommand;
  1739. }
  1740. else
  1741. {
  1742. command = this.CommandBuilder.GetSelectCommand(out dataTableMapping); ;
  1743. }
  1744. if (transaction != null)
  1745. {
  1746. command.Transaction = transaction;
  1747. }
  1748. System.Collections.IList dataObjectList;
  1749. FillDataObjectList(command, dataTableMapping, out dataObjectList);
  1750. return dataObjectList;
  1751. }
  1752. /// <summary>
  1753. /// Gets data object column table.
  1754. /// </summary>
  1755. /// <param name="columnNames">An array of Columns.</param>
  1756. /// <param name="transaction">Database transaction.</param>
  1757. /// <returns>data object column table.</returns>
  1758. protected virtual System.Collections.IList GetDataList(string[] columnNames, System.Data.IDbTransaction transaction)
  1759. {
  1760. System.Data.Common.DataTableMapping dataTableMapping;
  1761. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(columnNames, out dataTableMapping);
  1762. if (transaction != null)
  1763. {
  1764. command.Transaction = transaction;
  1765. }
  1766. System.Collections.IList dataObjectList;
  1767. FillDataObjectList(command, dataTableMapping, columnNames, out dataObjectList);
  1768. return dataObjectList;
  1769. }
  1770. /// <summary>
  1771. /// Gets data object column table.
  1772. /// </summary>
  1773. /// <param name="conditionCommand">Condition Command.</param>
  1774. /// <param name="transaction">Database transaction.</param>
  1775. /// <returns>data object column table.</returns>
  1776. protected virtual System.Collections.IList GetDataList(CommonCommand conditionCommand, System.Data.IDbTransaction transaction)
  1777. {
  1778. System.Data.Common.DataTableMapping dataTableMapping;
  1779. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(conditionCommand, out dataTableMapping);
  1780. if (transaction != null)
  1781. {
  1782. command.Transaction = transaction;
  1783. }
  1784. System.Collections.IList dataObjectList;
  1785. FillDataObjectList(command, dataTableMapping, out dataObjectList);
  1786. return dataObjectList;
  1787. }
  1788. /// <summary>
  1789. /// Gets data object column table.
  1790. /// </summary>
  1791. /// <param name="columnNames">An array of Columns.</param>
  1792. /// <param name="conditionCommand">Condition Command.</param>
  1793. /// <param name="transaction">Database transaction.</param>
  1794. /// <returns>data object column table.</returns>
  1795. protected virtual System.Collections.IList GetDataList(string[] columnNames, CommonCommand conditionCommand, System.Data.IDbTransaction transaction)
  1796. {
  1797. System.Data.Common.DataTableMapping dataTableMapping;
  1798. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(columnNames, conditionCommand, out dataTableMapping);
  1799. if (transaction != null)
  1800. {
  1801. command.Transaction = transaction;
  1802. }
  1803. System.Collections.IList dataObjectList;
  1804. FillDataObjectList(command, dataTableMapping, columnNames, out dataObjectList);
  1805. return dataObjectList;
  1806. }
  1807. #region Paging Operation
  1808. /// <summary>
  1809. /// Filldata object column table.
  1810. /// </summary>
  1811. /// <param name="command">Command.</param>
  1812. /// <param name="dataObjectList">data object column table.</param>
  1813. /// <param name="columnNames">column name column table.</param>
  1814. /// <param name="propertyInfos">property info dictionary.</param>
  1815. /// <param name="sourceNames">source name dictionary.</param>
  1816. /// <param name="dbTypes">data type dictionary.</param>
  1817. /// <param name="startRecord">The zero-based record number to start with. </param>
  1818. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  1819. /// <returns>The result of execute command.</returns>
  1820. private int FillDataObjectList(System.Data.IDbCommand command, System.Collections.IList dataObjectList, System.Collections.IList columnNames, Dictionary<string, System.Reflection.PropertyInfo> propertyInfos, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes, int startRecord, int maxRecords)
  1821. {
  1822. WriteLog(command);
  1823. System.Data.IDataReader dataReader = RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  1824. int index = 0;
  1825. int count = 0;
  1826. try
  1827. {
  1828. while ((dataReader.Read()) && (count < maxRecords))
  1829. {
  1830. if (index >= startRecord)
  1831. {
  1832. object dataObject = CreateDataObject();
  1833. foreach (string columnName in columnNames)
  1834. {
  1835. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceNames[columnName], dbTypes[columnName]);
  1836. if (value == System.DBNull.Value)
  1837. {
  1838. propertyInfos[columnName].SetValue(dataObject, null, null);
  1839. }
  1840. else
  1841. {
  1842. if (propertyConverters[columnName] != null)
  1843. {
  1844. value = propertyConverters[columnName](value);
  1845. }
  1846. propertyInfos[columnName].SetValue(dataObject, value, null);
  1847. }
  1848. }
  1849. dataObjectList.Add(dataObject);
  1850. count++;
  1851. }
  1852. index++;
  1853. }
  1854. }
  1855. finally
  1856. {
  1857. if (dataReader != null)
  1858. {
  1859. dataReader.Close();
  1860. }
  1861. }
  1862. return count;
  1863. }
  1864. /// <summary>
  1865. /// Filldata object column table.
  1866. /// </summary>
  1867. /// <param name="command">Command.</param>
  1868. /// <param name="dataTableMapping">Data table mapping.</param>
  1869. /// <param name="dataObjectList">data object column table.</param>
  1870. /// <param name="startRecord">The zero-based record number to start with. </param>
  1871. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  1872. /// <returns>The result of execute command.</returns>
  1873. protected int FillDataObjectList(System.Data.IDbCommand command, System.Data.Common.DataTableMapping dataTableMapping, out System.Collections.IList dataObjectList, int startRecord, int maxRecords)
  1874. {
  1875. if (UseDynamicProxy)
  1876. {
  1877. dataObjectList = CreateDataObjectList();
  1878. List<string> columnNames;
  1879. IObjectAccessor objectAccessor;
  1880. Dictionary<string, string> sourceNames;
  1881. Dictionary<string, System.Data.DbType> dbTypes;
  1882. Dictionary<string, DataConverter> propertyConverters;
  1883. BuildMappingInfo(dataTableMapping, out columnNames, out objectAccessor, out propertyConverters, out sourceNames, out dbTypes);
  1884. return FillDataObjectList(command, dataObjectList, columnNames, objectAccessor, propertyConverters, sourceNames, dbTypes, startRecord, maxRecords);
  1885. }
  1886. else
  1887. {
  1888. if ((typeof(IDataObjectProxy)).IsAssignableFrom(this.dataObjectType))
  1889. {
  1890. // proxy.
  1891. IDataObjectProxy proxy = System.Activator.CreateInstance(this.dataObjectType) as IDataObjectProxy;
  1892. dataObjectList = proxy.CreateObjectList();
  1893. List<string> columnNames;
  1894. Dictionary<string, string> sourceNames;
  1895. Dictionary<string, System.Data.DbType> dbTypes;
  1896. Dictionary<string, DataConverter> propertyConverters;
  1897. BuildMappingInfo(dataTableMapping, out columnNames, proxy, out propertyConverters, out sourceNames, out dbTypes);
  1898. return FillDataObjectList(command, dataObjectList, columnNames, proxy, propertyConverters, sourceNames, dbTypes, startRecord, maxRecords);
  1899. }
  1900. else
  1901. {
  1902. dataObjectList = CreateDataObjectList();
  1903. List<string> columnNames;
  1904. Dictionary<string, System.Reflection.PropertyInfo> propertyInfos;
  1905. Dictionary<string, string> sourceNames;
  1906. Dictionary<string, System.Data.DbType> dbTypes;
  1907. Dictionary<string, DataConverter> propertyConverters;
  1908. BuildMappingInfo(dataTableMapping, out columnNames, out propertyInfos, out propertyConverters, out sourceNames, out dbTypes);
  1909. return FillDataObjectList(command, dataObjectList, columnNames, propertyInfos, propertyConverters, sourceNames, dbTypes, startRecord, maxRecords);
  1910. }
  1911. }
  1912. }
  1913. /// <summary>
  1914. /// Filldata object column table.
  1915. /// </summary>
  1916. /// <param name="command">Command.</param>
  1917. /// <param name="dataTableMapping">Data table mapping.</param>
  1918. /// <param name="columnNames">An array of Columns.</param>
  1919. /// <param name="dataItemList">data object column table.</param>
  1920. /// <param name="startRecord">The zero-based record number to start with. </param>
  1921. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  1922. /// <returns>The result of execute command.</returns>
  1923. protected int FillDataObjectList(System.Data.IDbCommand command, System.Data.Common.DataTableMapping dataTableMapping, string[] columnNames, out System.Collections.IList dataObjectList, int startRecord, int maxRecords)
  1924. {
  1925. if (UseDynamicProxy)
  1926. {
  1927. dataObjectList = CreateDataObjectList();
  1928. IObjectAccessor objectAccessor;
  1929. Dictionary<string, string> sourceNames;
  1930. Dictionary<string, System.Data.DbType> dbTypes;
  1931. Dictionary<string, DataConverter> propertyConverters;
  1932. BuildMappingInfo(dataTableMapping, columnNames, out objectAccessor, out propertyConverters, out sourceNames, out dbTypes);
  1933. return FillDataObjectList(command, dataObjectList, columnNames, objectAccessor, propertyConverters, sourceNames, dbTypes, startRecord, maxRecords);
  1934. }
  1935. else
  1936. {
  1937. if ((typeof(IDataObjectProxy)).IsAssignableFrom(this.dataObjectType))
  1938. {
  1939. // proxy.
  1940. IDataObjectProxy proxy = System.Activator.CreateInstance(this.dataObjectType) as IDataObjectProxy;
  1941. dataObjectList = proxy.CreateObjectList();
  1942. Dictionary<string, string> sourceNames;
  1943. Dictionary<string, System.Data.DbType> dbTypes;
  1944. Dictionary<string, DataConverter> propertyConverters;
  1945. BuildMappingInfo(dataTableMapping, columnNames, proxy, out propertyConverters, out sourceNames, out dbTypes);
  1946. return FillDataObjectList(command, dataObjectList, columnNames, proxy, propertyConverters, sourceNames, dbTypes, startRecord, maxRecords);
  1947. }
  1948. else
  1949. {
  1950. dataObjectList = CreateDataObjectList();
  1951. Dictionary<string, System.Reflection.PropertyInfo> propertyInfos;
  1952. Dictionary<string, string> sourceNames;
  1953. Dictionary<string, System.Data.DbType> dbTypes;
  1954. Dictionary<string, DataConverter> propertyConverters;
  1955. BuildMappingInfo(dataTableMapping, columnNames, out propertyInfos, out propertyConverters, out sourceNames, out dbTypes);
  1956. return FillDataObjectList(command, dataObjectList, columnNames, propertyInfos, propertyConverters, sourceNames, dbTypes, startRecord, maxRecords);
  1957. }
  1958. }
  1959. }
  1960. /// <summary>
  1961. /// Gets data object column table.
  1962. /// </summary>
  1963. /// <param name="startRecord">The zero-based record number to start with. </param>
  1964. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  1965. /// <param name="transaction">Database transaction.</param>
  1966. /// <returns>data object column table.</returns>
  1967. protected virtual System.Collections.IList GetDataList(int startRecord, int maxRecords, System.Data.IDbTransaction transaction)
  1968. {
  1969. System.Data.Common.DataTableMapping dataTableMapping;
  1970. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(out dataTableMapping);
  1971. if (transaction != null)
  1972. {
  1973. command.Transaction = transaction;
  1974. }
  1975. System.Collections.IList dataObjectList;
  1976. FillDataObjectList(command, dataTableMapping, out dataObjectList, startRecord, maxRecords);
  1977. return dataObjectList;
  1978. }
  1979. /// <summary>
  1980. /// Gets data object column table.
  1981. /// </summary>
  1982. /// <param name="columnNames">An array of Columns.</param>
  1983. /// <param name="startRecord">The zero-based record number to start with. </param>
  1984. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  1985. /// <param name="transaction">Database transaction.</param>
  1986. /// <returns>data object column table.</returns>
  1987. protected virtual System.Collections.IList GetDataList(string[] columnNames, int startRecord, int maxRecords, System.Data.IDbTransaction transaction)
  1988. {
  1989. System.Data.Common.DataTableMapping dataTableMapping;
  1990. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(columnNames, out dataTableMapping);
  1991. if (transaction != null)
  1992. {
  1993. command.Transaction = transaction;
  1994. }
  1995. System.Collections.IList dataObjectList;
  1996. FillDataObjectList(command, dataTableMapping, columnNames, out dataObjectList, startRecord, maxRecords);
  1997. return dataObjectList;
  1998. }
  1999. /// <summary>
  2000. /// Gets data object column table.
  2001. /// </summary>
  2002. /// <param name="conditionCommand">Condition Command.</param>
  2003. /// <param name="startRecord">The zero-based record number to start with. </param>
  2004. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2005. /// <param name="transaction">Database transaction.</param>
  2006. /// <returns>data object column table.</returns>
  2007. protected virtual System.Collections.IList GetDataList(CommonCommand conditionCommand, int startRecord, int maxRecords, System.Data.IDbTransaction transaction)
  2008. {
  2009. System.Data.Common.DataTableMapping dataTableMapping;
  2010. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(conditionCommand, out dataTableMapping);
  2011. if (transaction != null)
  2012. {
  2013. command.Transaction = transaction;
  2014. }
  2015. System.Collections.IList dataObjectList;
  2016. FillDataObjectList(command, dataTableMapping, out dataObjectList, startRecord, maxRecords);
  2017. return dataObjectList;
  2018. }
  2019. /// <summary>
  2020. /// Gets data object column table.
  2021. /// </summary>
  2022. /// <param name="columnNames">An array of Columns.</param>
  2023. /// <param name="conditionCommand">Condition Command.</param>
  2024. /// <param name="startRecord">The zero-based record number to start with. </param>
  2025. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2026. /// <param name="transaction">Database transaction.</param>
  2027. /// <returns>data object column table.</returns>
  2028. protected virtual System.Collections.IList GetDataList(string[] columnNames, CommonCommand conditionCommand, int startRecord, int maxRecords, System.Data.IDbTransaction transaction)
  2029. {
  2030. System.Data.Common.DataTableMapping dataTableMapping;
  2031. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(columnNames, conditionCommand, out dataTableMapping);
  2032. if (transaction != null)
  2033. {
  2034. command.Transaction = transaction;
  2035. }
  2036. System.Collections.IList dataObjectList;
  2037. FillDataObjectList(command, dataTableMapping, columnNames, out dataObjectList, startRecord, maxRecords);
  2038. return dataObjectList;
  2039. }
  2040. #endregion
  2041. #region Enumerator
  2042. /// <summary>
  2043. /// Gets the enumerator of data objects.
  2044. /// </summary>
  2045. /// <param name="command">Command.</param>
  2046. /// <param name="columnNames">column name column table.</param>
  2047. /// <param name="propertyInfos">property info dictionary.</param>
  2048. /// <param name="sourceNames">source name dictionary.</param>
  2049. /// <param name="dbTypes">data type dictionary.</param>
  2050. /// <returns>the enumerator of data objects.</returns>
  2051. private System.Collections.IEnumerable GetEnumerator(System.Data.IDbCommand command, System.Collections.IList columnNames, Dictionary<string, System.Reflection.PropertyInfo> propertyInfos, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes)
  2052. {
  2053. WriteLog(command);
  2054. System.Data.IDataReader dataReader = RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  2055. try
  2056. {
  2057. while (dataReader.Read())
  2058. {
  2059. object dataObject = CreateDataObject();
  2060. foreach (string columnName in columnNames)
  2061. {
  2062. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceNames[columnName], dbTypes[columnName]);
  2063. if (value == System.DBNull.Value)
  2064. {
  2065. propertyInfos[columnName].SetValue(dataObject, null, null);
  2066. }
  2067. else
  2068. {
  2069. if (propertyConverters[columnName] != null)
  2070. {
  2071. value = propertyConverters[columnName](value);
  2072. }
  2073. propertyInfos[columnName].SetValue(dataObject, value, null);
  2074. }
  2075. }
  2076. yield return dataObject;
  2077. }
  2078. }
  2079. finally
  2080. {
  2081. if (dataReader != null)
  2082. {
  2083. dataReader.Close();
  2084. }
  2085. }
  2086. }
  2087. /// <summary>
  2088. /// Gets the enumerator of data objects.
  2089. /// </summary>
  2090. /// <param name="command">Command.</param>
  2091. /// <param name="dataTableMapping">Data table mapping.</param>
  2092. /// <returns>the enumerator of data objects.</returns>
  2093. protected System.Collections.IEnumerable GetEnumerator(System.Data.IDbCommand command, System.Data.Common.DataTableMapping dataTableMapping)
  2094. {
  2095. if (UseDynamicProxy)
  2096. {
  2097. List<string> columnNames;
  2098. IObjectAccessor objectAccessor;
  2099. Dictionary<string, string> sourceNames;
  2100. Dictionary<string, System.Data.DbType> dbTypes;
  2101. Dictionary<string, DataConverter> propertyConverters;
  2102. BuildMappingInfo(dataTableMapping, out columnNames, out objectAccessor, out propertyConverters, out sourceNames, out dbTypes);
  2103. return GetEnumerator(command, columnNames, objectAccessor, propertyConverters, sourceNames, dbTypes);
  2104. }
  2105. else
  2106. {
  2107. if ((typeof(IDataObjectProxy)).IsAssignableFrom(this.dataObjectType))
  2108. {
  2109. // proxy.
  2110. IDataObjectProxy proxy = System.Activator.CreateInstance(this.dataObjectType) as IDataObjectProxy;
  2111. List<string> columnNames;
  2112. Dictionary<string, string> sourceNames;
  2113. Dictionary<string, System.Data.DbType> dbTypes;
  2114. Dictionary<string, DataConverter> propertyConverters;
  2115. BuildMappingInfo(dataTableMapping, out columnNames, proxy, out propertyConverters, out sourceNames, out dbTypes);
  2116. return GetEnumerator(command, columnNames, proxy, propertyConverters, sourceNames, dbTypes);
  2117. }
  2118. else
  2119. {
  2120. List<string> columnNames;
  2121. Dictionary<string, System.Reflection.PropertyInfo> propertyInfos;
  2122. Dictionary<string, string> sourceNames;
  2123. Dictionary<string, System.Data.DbType> dbTypes;
  2124. Dictionary<string, DataConverter> propertyConverters;
  2125. BuildMappingInfo(dataTableMapping, out columnNames, out propertyInfos, out propertyConverters, out sourceNames, out dbTypes);
  2126. return GetEnumerator(command, columnNames, propertyInfos, propertyConverters, sourceNames, dbTypes);
  2127. }
  2128. }
  2129. }
  2130. /// <summary>
  2131. /// Gets the enumerator of data objects.
  2132. /// </summary>
  2133. /// <param name="command">Command.</param>
  2134. /// <param name="dataTableMapping">Data table mapping.</param>
  2135. /// <param name="columnNames">An array of Columns.</param>
  2136. /// <returns>The result of execute command.</returns>
  2137. protected System.Collections.IEnumerable GetEnumerator(System.Data.IDbCommand command, System.Data.Common.DataTableMapping dataTableMapping, string[] columnNames)
  2138. {
  2139. if (UseDynamicProxy)
  2140. {
  2141. IObjectAccessor objectAccessor;
  2142. Dictionary<string, string> sourceNames;
  2143. Dictionary<string, System.Data.DbType> dbTypes;
  2144. Dictionary<string, DataConverter> propertyConverters;
  2145. BuildMappingInfo(dataTableMapping, columnNames, out objectAccessor, out propertyConverters, out sourceNames, out dbTypes);
  2146. return GetEnumerator(command, columnNames, objectAccessor, propertyConverters, sourceNames, dbTypes);
  2147. }
  2148. else
  2149. {
  2150. if ((typeof(IDataObjectProxy)).IsAssignableFrom(this.dataObjectType))
  2151. {
  2152. // proxy.
  2153. IDataObjectProxy proxy = System.Activator.CreateInstance(this.dataObjectType) as IDataObjectProxy;
  2154. Dictionary<string, string> sourceNames;
  2155. Dictionary<string, System.Data.DbType> dbTypes;
  2156. Dictionary<string, DataConverter> propertyConverters;
  2157. BuildMappingInfo(dataTableMapping, columnNames, proxy, out propertyConverters, out sourceNames, out dbTypes);
  2158. return GetEnumerator(command, columnNames, proxy, propertyConverters, sourceNames, dbTypes);
  2159. }
  2160. else
  2161. {
  2162. Dictionary<string, System.Reflection.PropertyInfo> propertyInfos;
  2163. Dictionary<string, string> sourceNames;
  2164. Dictionary<string, System.Data.DbType> dbTypes;
  2165. Dictionary<string, DataConverter> propertyConverters;
  2166. BuildMappingInfo(dataTableMapping, columnNames, out propertyInfos, out propertyConverters, out sourceNames, out dbTypes);
  2167. return GetEnumerator(command, columnNames, propertyInfos, propertyConverters, sourceNames, dbTypes);
  2168. }
  2169. }
  2170. }
  2171. private System.Data.IDbCommand _defalutSelectCommand;
  2172. /// <summary>
  2173. /// Gets the enumerator of data objects.
  2174. /// </summary>
  2175. /// <param name="transaction">Database transaction.</param>
  2176. /// <returns>the enumerator of data objects.</returns>
  2177. protected virtual System.Collections.IEnumerable GetEnumerator(System.Data.IDbTransaction transaction)
  2178. {
  2179. System.Data.Common.DataTableMapping dataTableMapping;
  2180. System.Data.IDbCommand command = null;
  2181. if (CacheDefalutCommand)
  2182. {
  2183. if (_defalutSelectCommand == null)
  2184. {
  2185. _defalutSelectCommand = this.CommandBuilder.GetSelectCommand(out _defaultDataTableMapping);
  2186. }
  2187. dataTableMapping = _defaultDataTableMapping;
  2188. command = _defalutSelectCommand;
  2189. }
  2190. else
  2191. {
  2192. command = this.CommandBuilder.GetSelectCommand(out dataTableMapping); ;
  2193. }
  2194. if (transaction != null)
  2195. {
  2196. command.Transaction = transaction;
  2197. }
  2198. return GetEnumerator(command, dataTableMapping);
  2199. }
  2200. /// <summary>
  2201. /// Gets the enumerator of data objects.
  2202. /// </summary>
  2203. /// <param name="columnNames">An array of Columns.</param>
  2204. /// <param name="transaction">Database transaction.</param>
  2205. /// <returns>the enumerator of data objects.</returns>
  2206. protected virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, System.Data.IDbTransaction transaction)
  2207. {
  2208. System.Data.Common.DataTableMapping dataTableMapping;
  2209. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(columnNames, out dataTableMapping);
  2210. if (transaction != null)
  2211. {
  2212. command.Transaction = transaction;
  2213. }
  2214. return GetEnumerator(command, dataTableMapping, columnNames);
  2215. }
  2216. /// <summary>
  2217. /// Gets the enumerator of data objects.
  2218. /// </summary>
  2219. /// <param name="conditionCommand">Condition Command.</param>
  2220. /// <param name="transaction">Database transaction.</param>
  2221. /// <returns>the enumerator of data objects.</returns>
  2222. protected virtual System.Collections.IEnumerable GetEnumerator(CommonCommand conditionCommand, System.Data.IDbTransaction transaction)
  2223. {
  2224. System.Data.Common.DataTableMapping dataTableMapping;
  2225. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(conditionCommand, out dataTableMapping);
  2226. if (transaction != null)
  2227. {
  2228. command.Transaction = transaction;
  2229. }
  2230. return GetEnumerator(command, dataTableMapping);
  2231. }
  2232. /// <summary>
  2233. /// Gets the enumerator of data objects.
  2234. /// </summary>
  2235. /// <param name="columnNames">An array of Columns.</param>
  2236. /// <param name="conditionCommand">Condition Command.</param>
  2237. /// <param name="transaction">Database transaction.</param>
  2238. /// <returns>the enumerator of data objects.</returns>
  2239. protected virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, CommonCommand conditionCommand, System.Data.IDbTransaction transaction)
  2240. {
  2241. System.Data.Common.DataTableMapping dataTableMapping;
  2242. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(columnNames, conditionCommand, out dataTableMapping);
  2243. if (transaction != null)
  2244. {
  2245. command.Transaction = transaction;
  2246. }
  2247. return GetEnumerator(command, dataTableMapping, columnNames);
  2248. }
  2249. #region Paging Operation
  2250. /// <summary>
  2251. /// Gets the enumerator of data objects.
  2252. /// </summary>
  2253. /// <param name="command">Command.</param>
  2254. /// <param name="columnNames">column name column table.</param>
  2255. /// <param name="propertyInfos">property info dictionary.</param>
  2256. /// <param name="sourceNames">source name dictionary.</param>
  2257. /// <param name="dbTypes">data type dictionary.</param>
  2258. /// <param name="startRecord">The zero-based record number to start with. </param>
  2259. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2260. /// <returns>the enumerator of data objects.</returns>
  2261. private System.Collections.IEnumerable GetEnumerator(System.Data.IDbCommand command, System.Collections.IList columnNames, Dictionary<string, System.Reflection.PropertyInfo> propertyInfos, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes, int startRecord, int maxRecords)
  2262. {
  2263. WriteLog(command);
  2264. System.Data.IDataReader dataReader = RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  2265. int index = 0;
  2266. int count = 0;
  2267. try
  2268. {
  2269. while ((dataReader.Read()) && (count < maxRecords))
  2270. {
  2271. if (index >= startRecord)
  2272. {
  2273. object dataObject = CreateDataObject();
  2274. foreach (string columnName in columnNames)
  2275. {
  2276. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceNames[columnName], dbTypes[columnName]);
  2277. if (value == System.DBNull.Value)
  2278. {
  2279. propertyInfos[columnName].SetValue(dataObject, null, null);
  2280. }
  2281. else
  2282. {
  2283. if (propertyConverters[columnName] != null)
  2284. {
  2285. value = propertyConverters[columnName](value);
  2286. }
  2287. propertyInfos[columnName].SetValue(dataObject, value, null);
  2288. }
  2289. }
  2290. yield return dataObject;
  2291. count++;
  2292. }
  2293. index++;
  2294. }
  2295. }
  2296. finally
  2297. {
  2298. if (dataReader != null)
  2299. {
  2300. dataReader.Close();
  2301. }
  2302. }
  2303. }
  2304. /// <summary>
  2305. /// Gets the enumerator of data objects.
  2306. /// </summary>
  2307. /// <param name="command">Command.</param>
  2308. /// <param name="dataTableMapping">Data table mapping.</param>
  2309. /// <param name="startRecord">The zero-based record number to start with. </param>
  2310. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2311. /// <returns>the enumerator of data objects.</returns>
  2312. protected System.Collections.IEnumerable GetEnumerator(System.Data.IDbCommand command, System.Data.Common.DataTableMapping dataTableMapping, int startRecord, int maxRecords)
  2313. {
  2314. if (UseDynamicProxy)
  2315. {
  2316. List<string> columnNames;
  2317. IObjectAccessor objectAccessor;
  2318. Dictionary<string, string> sourceNames;
  2319. Dictionary<string, System.Data.DbType> dbTypes;
  2320. Dictionary<string, DataConverter> propertyConverters;
  2321. BuildMappingInfo(dataTableMapping, out columnNames, out objectAccessor, out propertyConverters, out sourceNames, out dbTypes);
  2322. return GetEnumerator(command, columnNames, objectAccessor, propertyConverters, sourceNames, dbTypes, startRecord, maxRecords);
  2323. }
  2324. else
  2325. {
  2326. if ((typeof(IDataObjectProxy)).IsAssignableFrom(this.dataObjectType))
  2327. {
  2328. // proxy.
  2329. IDataObjectProxy proxy = System.Activator.CreateInstance(this.dataObjectType) as IDataObjectProxy;
  2330. List<string> columnNames;
  2331. Dictionary<string, string> sourceNames;
  2332. Dictionary<string, System.Data.DbType> dbTypes;
  2333. Dictionary<string, DataConverter> propertyConverters;
  2334. BuildMappingInfo(dataTableMapping, out columnNames, proxy, out propertyConverters, out sourceNames, out dbTypes);
  2335. return GetEnumerator(command, columnNames, proxy, propertyConverters, sourceNames, dbTypes, startRecord, maxRecords);
  2336. }
  2337. else
  2338. {
  2339. List<string> columnNames;
  2340. Dictionary<string, System.Reflection.PropertyInfo> propertyInfos;
  2341. Dictionary<string, string> sourceNames;
  2342. Dictionary<string, System.Data.DbType> dbTypes;
  2343. Dictionary<string, DataConverter> propertyConverters;
  2344. BuildMappingInfo(dataTableMapping, out columnNames, out propertyInfos, out propertyConverters, out sourceNames, out dbTypes);
  2345. return GetEnumerator(command, columnNames, propertyInfos, propertyConverters, sourceNames, dbTypes, startRecord, maxRecords);
  2346. }
  2347. }
  2348. }
  2349. /// <summary>
  2350. /// Gets the enumerator of data objects.
  2351. /// </summary>
  2352. /// <param name="command">Command.</param>
  2353. /// <param name="dataTableMapping">Data table mapping.</param>
  2354. /// <param name="columnNames">An array of Columns.</param>
  2355. /// <param name="startRecord">The zero-based record number to start with. </param>
  2356. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2357. /// <returns>the enumerator of data objects.</returns>
  2358. protected System.Collections.IEnumerable GetEnumerator(System.Data.IDbCommand command, System.Data.Common.DataTableMapping dataTableMapping, string[] columnNames, int startRecord, int maxRecords)
  2359. {
  2360. if (UseDynamicProxy)
  2361. {
  2362. IObjectAccessor objectAccessor;
  2363. Dictionary<string, string> sourceNames;
  2364. Dictionary<string, System.Data.DbType> dbTypes;
  2365. Dictionary<string, DataConverter> propertyConverters;
  2366. BuildMappingInfo(dataTableMapping, columnNames, out objectAccessor, out propertyConverters, out sourceNames, out dbTypes);
  2367. return GetEnumerator(command, columnNames, objectAccessor, propertyConverters, sourceNames, dbTypes, startRecord, maxRecords);
  2368. }
  2369. else
  2370. {
  2371. if ((typeof(IDataObjectProxy)).IsAssignableFrom(this.dataObjectType))
  2372. {
  2373. // proxy.
  2374. IDataObjectProxy proxy = System.Activator.CreateInstance(this.dataObjectType) as IDataObjectProxy;
  2375. Dictionary<string, string> sourceNames;
  2376. Dictionary<string, System.Data.DbType> dbTypes;
  2377. Dictionary<string, DataConverter> propertyConverters;
  2378. BuildMappingInfo(dataTableMapping, columnNames, proxy, out propertyConverters, out sourceNames, out dbTypes);
  2379. return GetEnumerator(command, columnNames, proxy, propertyConverters, sourceNames, dbTypes, startRecord, maxRecords);
  2380. }
  2381. else
  2382. {
  2383. Dictionary<string, System.Reflection.PropertyInfo> propertyInfos;
  2384. Dictionary<string, string> sourceNames;
  2385. Dictionary<string, System.Data.DbType> dbTypes;
  2386. Dictionary<string, DataConverter> propertyConverters;
  2387. BuildMappingInfo(dataTableMapping, columnNames, out propertyInfos, out propertyConverters, out sourceNames, out dbTypes);
  2388. return GetEnumerator(command, columnNames, propertyInfos, propertyConverters, sourceNames, dbTypes, startRecord, maxRecords);
  2389. }
  2390. }
  2391. }
  2392. /// <summary>
  2393. /// Gets the enumerator of data objects.
  2394. /// </summary>
  2395. /// <param name="startRecord">The zero-based record number to start with. </param>
  2396. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2397. /// <param name="transaction">Database transaction.</param>
  2398. /// <returns>the enumerator of data objects.</returns>
  2399. protected virtual System.Collections.IEnumerable GetEnumerator(int startRecord, int maxRecords, System.Data.IDbTransaction transaction)
  2400. {
  2401. System.Data.Common.DataTableMapping dataTableMapping;
  2402. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(out dataTableMapping);
  2403. if (transaction != null)
  2404. {
  2405. command.Transaction = transaction;
  2406. }
  2407. return GetEnumerator(command, dataTableMapping, startRecord, maxRecords);
  2408. }
  2409. /// <summary>
  2410. /// Gets the enumerator of data objects.
  2411. /// </summary>
  2412. /// <param name="columnNames">An array of Columns.</param>
  2413. /// <param name="startRecord">The zero-based record number to start with. </param>
  2414. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2415. /// <param name="transaction">Database transaction.</param>
  2416. /// <returns>the enumerator of data objects.</returns>
  2417. protected virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, int startRecord, int maxRecords, System.Data.IDbTransaction transaction)
  2418. {
  2419. System.Data.Common.DataTableMapping dataTableMapping;
  2420. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(columnNames, out dataTableMapping);
  2421. if (transaction != null)
  2422. {
  2423. command.Transaction = transaction;
  2424. }
  2425. return GetEnumerator(command, dataTableMapping, columnNames, startRecord, maxRecords);
  2426. }
  2427. /// <summary>
  2428. /// Gets the enumerator of data objects.
  2429. /// </summary>
  2430. /// <param name="conditionCommand">Condition Command.</param>
  2431. /// <param name="startRecord">The zero-based record number to start with. </param>
  2432. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2433. /// <param name="transaction">Database transaction.</param>
  2434. /// <returns>the enumerator of data objects.</returns>
  2435. protected virtual System.Collections.IEnumerable GetEnumerator(CommonCommand conditionCommand, int startRecord, int maxRecords, System.Data.IDbTransaction transaction)
  2436. {
  2437. System.Data.Common.DataTableMapping dataTableMapping;
  2438. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(conditionCommand, out dataTableMapping);
  2439. if (transaction != null)
  2440. {
  2441. command.Transaction = transaction;
  2442. }
  2443. return GetEnumerator(command, dataTableMapping, startRecord, maxRecords);
  2444. }
  2445. /// <summary>
  2446. /// Gets the enumerator of data objects.
  2447. /// </summary>
  2448. /// <param name="columnNames">An array of Columns.</param>
  2449. /// <param name="conditionCommand">Condition Command.</param>
  2450. /// <param name="startRecord">The zero-based record number to start with. </param>
  2451. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2452. /// <param name="transaction">Database transaction.</param>
  2453. /// <returns>the enumerator of data objects.</returns>
  2454. protected virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, CommonCommand conditionCommand, int startRecord, int maxRecords, System.Data.IDbTransaction transaction)
  2455. {
  2456. System.Data.Common.DataTableMapping dataTableMapping;
  2457. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(columnNames, conditionCommand, out dataTableMapping);
  2458. if (transaction != null)
  2459. {
  2460. command.Transaction = transaction;
  2461. }
  2462. return GetEnumerator(command, dataTableMapping, columnNames, startRecord, maxRecords);
  2463. }
  2464. #endregion
  2465. #endregion
  2466. #endregion
  2467. #region Relation Operation
  2468. /// <summary>
  2469. /// Fill Data object.
  2470. /// </summary>
  2471. /// <param name="dataObject">Data object.</param>
  2472. /// <param name="primaryKeys">The value of primary key.</param>
  2473. /// <param name="transaction">Database transaction.</param>
  2474. /// <returns>The result of execute command.</returns>
  2475. protected virtual int FillByRelation(object dataObject, object[] primaryKeys, System.Data.IDbTransaction transaction)
  2476. {
  2477. throw new System.NotImplementedException("此方法Function 尚未实现,敬请关注!");
  2478. }
  2479. /// <summary>
  2480. /// Fill Data object.
  2481. /// </summary>
  2482. /// <param name="dataObject">Data object.</param>
  2483. /// <param name="primaryKeys">The value of primary key.</param>
  2484. /// <param name="columnNamesDictionary">column name array dictionary.</param>
  2485. /// <param name="transaction">Database transaction.</param>
  2486. /// <returns>The result of execute command.</returns>
  2487. protected virtual int FillByRelation(object dataObject, object[] primaryKeys, Dictionary<string, string[]> columnNamesDictionary, System.Data.IDbTransaction transaction)
  2488. {
  2489. throw new System.NotImplementedException("此方法Function 尚未实现,敬请关注!");
  2490. }
  2491. /// <summary>
  2492. /// Gets Data object.
  2493. /// </summary>
  2494. /// <param name="primaryKeys">The value of primary key.</param>
  2495. /// <param name="transaction">Database transaction.</param>
  2496. /// <returns>Data object.</returns>
  2497. protected virtual object GetDataByRelation(object[] primaryKeys, System.Data.IDbTransaction transaction)
  2498. {
  2499. throw new System.NotImplementedException("此方法Function 尚未实现,敬请关注!");
  2500. }
  2501. /// <summary>
  2502. /// Gets Data object.
  2503. /// </summary>
  2504. /// <param name="primaryKeys">The value of primary key.</param>
  2505. /// <param name="columnNamesDictionary">column name array dictionary.</param>
  2506. /// <param name="transaction">Database transaction.</param>
  2507. /// <returns>Data object.</returns>
  2508. protected virtual object GetDataByRelation(object[] primaryKeys, Dictionary<string, string[]> columnNamesDictionary, System.Data.IDbTransaction transaction)
  2509. {
  2510. throw new System.NotImplementedException("此方法Function 尚未实现,敬请关注!");
  2511. }
  2512. /// <summary>
  2513. /// Delete the data according the condition.
  2514. /// </summary>
  2515. /// <param name="primaryKeys">The value of primary key.</param>
  2516. /// <param name="transaction">Database transaction.</param>
  2517. /// <returns>The count of rows that updated.</returns>
  2518. protected virtual int DeleteByRelation(object[] primaryKeys, System.Data.IDbTransaction transaction)
  2519. {
  2520. throw new System.NotImplementedException("此方法Function 尚未实现,敬请关注!");
  2521. }
  2522. #endregion
  2523. #endregion
  2524. #region Common Methods
  2525. /// <summary>
  2526. /// Fill Data object.
  2527. /// </summary>
  2528. /// <param name="dataObject">Data object.</param>
  2529. /// <param name="primaryKeys">The value of primary key.</param>
  2530. /// <returns>The result of execute command.</returns>
  2531. public virtual int Fill(object dataObject, object[] primaryKeys)
  2532. {
  2533. return this.Fill(dataObject, primaryKeys, this.TransactionManager.DefaultTransaction);
  2534. }
  2535. /// <summary>
  2536. /// Fill Data object.
  2537. /// </summary>
  2538. /// <param name="dataObject">has primary key value Data object.</param>
  2539. /// <returns>The result of execute command.</returns>
  2540. public virtual int Fill(object dataObject)
  2541. {
  2542. return this.Fill(dataObject, this.TransactionManager.DefaultTransaction);
  2543. }
  2544. /// <summary>
  2545. /// Fill Data object.
  2546. /// </summary>
  2547. /// <param name="dataObject">Data object.</param>
  2548. /// <param name="primaryKeys">The value of primary key.</param>
  2549. /// <param name="columnNames">An array of Columns.</param>
  2550. /// <returns>The result of execute command.</returns>
  2551. public virtual int Fill(object dataObject, object[] primaryKeys, string[] columnNames)
  2552. {
  2553. return this.Fill(dataObject, primaryKeys, columnNames, this.TransactionManager.DefaultTransaction);
  2554. }
  2555. /// <summary>
  2556. /// Fill Data object.
  2557. /// </summary>
  2558. /// <param name="dataObject">has primary key value Data object.</param>
  2559. /// <param name="columnNames">An array of Columns.</param>
  2560. /// <returns>The result of execute command.</returns>
  2561. public virtual int Fill(object dataObject, string[] columnNames)
  2562. {
  2563. return this.Fill(dataObject, columnNames, this.TransactionManager.DefaultTransaction);
  2564. }
  2565. /// <summary>
  2566. /// Gets Data object.
  2567. /// </summary>
  2568. /// <param name="primaryKeys">The value of primary key.</param>
  2569. /// <returns>Data object.</returns>
  2570. public virtual object GetData(object[] primaryKeys)
  2571. {
  2572. return this.GetData(primaryKeys, this.TransactionManager.DefaultTransaction);
  2573. }
  2574. /// <summary>
  2575. /// Gets Data object.
  2576. /// </summary>
  2577. /// <param name="dataObject">has primary key value Data object.</param>
  2578. /// <returns>Data object.</returns>
  2579. public virtual object GetData(object dataObject)
  2580. {
  2581. return this.GetData(dataObject, this.TransactionManager.DefaultTransaction);
  2582. }
  2583. /// <summary>
  2584. /// Gets Data object.
  2585. /// </summary>
  2586. /// <param name="primaryKeys">The value of primary key.</param>
  2587. /// <param name="columnNames">An array of Columns.</param>
  2588. /// <returns>Data object.</returns>
  2589. public virtual object GetData(object[] primaryKeys, string[] columnNames)
  2590. {
  2591. return this.GetData(primaryKeys, columnNames, this.TransactionManager.DefaultTransaction);
  2592. }
  2593. /// <summary>
  2594. /// Gets Data object.
  2595. /// </summary>
  2596. /// <param name="dataObject">has primary key value Data object.</param>
  2597. /// <param name="columnNames">An array of Columns.</param>
  2598. /// <returns>Data object.</returns>
  2599. public virtual object GetData(object dataObject, string[] columnNames)
  2600. {
  2601. return this.GetData(dataObject, columnNames, this.TransactionManager.DefaultTransaction);
  2602. }
  2603. /// <summary>
  2604. /// Insert Data object.
  2605. /// </summary>
  2606. /// <param name="dataObject">Data object.</param>
  2607. /// <returns>The count of rows that updated.</returns>
  2608. public virtual int Insert(object dataObject)
  2609. {
  2610. return this.Insert(dataObject, this.TransactionManager.DefaultTransaction);
  2611. }
  2612. /// <summary>
  2613. /// Insert Data object.
  2614. /// </summary>
  2615. /// <param name="dataObject">Data object.</param>
  2616. /// <param name="columnNames">An array of Columns.</param>
  2617. /// <returns>The count of rows that updated.</returns>
  2618. public virtual int Insert(object dataObject, string[] columnNames)
  2619. {
  2620. return this.Insert(dataObject, columnNames, this.TransactionManager.DefaultTransaction);
  2621. }
  2622. /// <summary>
  2623. /// Delete Data object.
  2624. /// </summary>
  2625. /// <param name="dataObject">Data object.</param>
  2626. /// <returns>The count of rows that updated.</returns>
  2627. public virtual int Delete(object dataObject)
  2628. {
  2629. return this.Delete(dataObject, this.TransactionManager.DefaultTransaction);
  2630. }
  2631. /// <summary>
  2632. /// Delete Data object.
  2633. /// </summary>
  2634. /// <param name="primaryKeys">The value of primary key.</param>
  2635. /// <returns>The count of rows that updated.</returns>
  2636. public virtual int Delete(object[] primaryKeys)
  2637. {
  2638. return this.Delete(primaryKeys, this.TransactionManager.DefaultTransaction);
  2639. }
  2640. /// <summary>
  2641. /// Update Data object.
  2642. /// </summary>
  2643. /// <param name="dataObject">Data object.</param>
  2644. /// <returns>The count of rows that updated.</returns>
  2645. public virtual int Update(object dataObject)
  2646. {
  2647. return this.Update(dataObject, this.TransactionManager.DefaultTransaction);
  2648. }
  2649. /// <summary>
  2650. /// Update Data object.
  2651. /// </summary>
  2652. /// <param name="primaryKeys">The value of primary key.</param>
  2653. /// <param name="dataObject">Data object.</param>
  2654. /// <returns>The count of rows that updated.</returns>
  2655. public virtual int Update(object[] primaryKeys, object dataObject)
  2656. {
  2657. return this.Update(primaryKeys, dataObject, this.TransactionManager.DefaultTransaction);
  2658. }
  2659. /// <summary>
  2660. /// Update Data object.
  2661. /// </summary>
  2662. /// <param name="dataObject">Data object.</param>
  2663. /// <param name="columnNames">An array of Columns.</param>
  2664. /// <returns>The count of rows that updated.</returns>
  2665. public virtual int Update(object dataObject, string[] columnNames)
  2666. {
  2667. return this.Update(dataObject, columnNames, this.TransactionManager.DefaultTransaction);
  2668. }
  2669. /// <summary>
  2670. /// Update Data object.
  2671. /// </summary>
  2672. /// <param name="primaryKeys">The value of primary key.</param>
  2673. /// <param name="dataObject">Data object.</param>
  2674. /// <param name="columnNames">An array of Columns.</param>
  2675. /// <returns>The count of rows that updated.</returns>
  2676. public virtual int Update(object[] primaryKeys, object dataObject, string[] columnNames)
  2677. {
  2678. return this.Update(primaryKeys, dataObject, columnNames, this.TransactionManager.DefaultTransaction);
  2679. }
  2680. /// <summary>
  2681. /// Check data object by primary key.
  2682. /// </summary>
  2683. /// <param name="dataObject">Data object.</param>
  2684. /// <returns>If exists then return true, otherwise return false.</returns>
  2685. public virtual bool Exists(object dataObject)
  2686. {
  2687. return this.Exists(dataObject, this.TransactionManager.DefaultTransaction);
  2688. }
  2689. /// <summary>
  2690. /// Check data object by primary key.
  2691. /// </summary>
  2692. /// <param name="primaryKeys">The value of primary key.</param>
  2693. /// <returns>If exists then return true, otherwise return false.</returns>
  2694. public virtual bool Exists(object[] primaryKeys)
  2695. {
  2696. return this.Exists(primaryKeys, this.TransactionManager.DefaultTransaction);
  2697. }
  2698. /// <summary>
  2699. /// Save Data object.
  2700. /// </summary>
  2701. /// <param name="dataObject">Data object.</param>
  2702. /// <returns>The count of rows that updated.</returns>
  2703. public virtual int Save(object dataObject)
  2704. {
  2705. return this.Save(dataObject, this.TransactionManager.DefaultTransaction);
  2706. }
  2707. /// <summary>
  2708. /// Save Data object.
  2709. /// </summary>
  2710. /// <param name="dataObject">Data object.</param>
  2711. /// <param name="columnNames">An array of Columns.</param>
  2712. /// <returns>The count of rows that updated.</returns>
  2713. public virtual int Save(object dataObject, string[] columnNames)
  2714. {
  2715. return this.Save(dataObject, columnNames, this.TransactionManager.DefaultTransaction);
  2716. }
  2717. #region Batch Operation
  2718. /// <summary>
  2719. /// Gets data object column table.
  2720. /// </summary>
  2721. /// <returns>data object column table.</returns>
  2722. public virtual System.Collections.IList GetDataList()
  2723. {
  2724. return GetDataList(this.TransactionManager.DefaultTransaction);
  2725. }
  2726. /// <summary>
  2727. /// Gets data object column table.
  2728. /// </summary>
  2729. /// <param name="columnNames">An array of Columns.</param>
  2730. /// <returns>data object column table.</returns>
  2731. public virtual System.Collections.IList GetDataList(string[] columnNames)
  2732. {
  2733. return GetDataList(columnNames, this.TransactionManager.DefaultTransaction);
  2734. }
  2735. /// <summary>
  2736. /// Gets data object column table.
  2737. /// </summary>
  2738. /// <param name="conditionCommand">Condition Command.</param>
  2739. /// <returns>data object column table.</returns>
  2740. public virtual System.Collections.IList GetDataList(CommonCommand conditionCommand)
  2741. {
  2742. return GetDataList(conditionCommand, this.TransactionManager.DefaultTransaction);
  2743. }
  2744. /// <summary>
  2745. /// Gets data object column table.
  2746. /// </summary>
  2747. /// <param name="columnNames">An array of Columns.</param>
  2748. /// <param name="conditionCommand">Condition Command.</param>
  2749. /// <returns>data object column table.</returns>
  2750. public virtual System.Collections.IList GetDataList(string[] columnNames, CommonCommand conditionCommand)
  2751. {
  2752. return GetDataList(columnNames, conditionCommand, this.TransactionManager.DefaultTransaction);
  2753. }
  2754. #region Paging Operation
  2755. /// <summary>
  2756. /// Gets data object column table.
  2757. /// </summary>
  2758. /// <param name="startRecord">The zero-based record number to start with. </param>
  2759. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2760. /// <returns>data object column table.</returns>
  2761. public virtual System.Collections.IList GetDataList(int startRecord, int maxRecords)
  2762. {
  2763. return GetDataList(startRecord, maxRecords, this.TransactionManager.DefaultTransaction);
  2764. }
  2765. /// <summary>
  2766. /// Gets data object column table.
  2767. /// </summary>
  2768. /// <param name="columnNames">An array of Columns.</param>
  2769. /// <param name="startRecord">The zero-based record number to start with. </param>
  2770. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2771. /// <returns>data object column table.</returns>
  2772. public virtual System.Collections.IList GetDataList(string[] columnNames, int startRecord, int maxRecords)
  2773. {
  2774. return GetDataList(columnNames, startRecord, maxRecords, this.TransactionManager.DefaultTransaction);
  2775. }
  2776. /// <summary>
  2777. /// Gets data object column table.
  2778. /// </summary>
  2779. /// <param name="conditionCommand">Condition Command.</param>
  2780. /// <param name="startRecord">The zero-based record number to start with. </param>
  2781. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2782. /// <returns>data object column table.</returns>
  2783. public virtual System.Collections.IList GetDataList(CommonCommand conditionCommand, int startRecord, int maxRecords)
  2784. {
  2785. return GetDataList(conditionCommand, startRecord, maxRecords, this.TransactionManager.DefaultTransaction);
  2786. }
  2787. /// <summary>
  2788. /// Gets data object column table.
  2789. /// </summary>
  2790. /// <param name="columnNames">An array of Columns.</param>
  2791. /// <param name="conditionCommand">Condition Command.</param>
  2792. /// <param name="startRecord">The zero-based record number to start with. </param>
  2793. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2794. /// <returns>data object column table.</returns>
  2795. public virtual System.Collections.IList GetDataList(string[] columnNames, CommonCommand conditionCommand, int startRecord, int maxRecords)
  2796. {
  2797. return GetDataList(columnNames, conditionCommand, startRecord, maxRecords, this.TransactionManager.DefaultTransaction);
  2798. }
  2799. #endregion
  2800. #region Enumerator
  2801. /// <summary>
  2802. /// Gets the enumerator of data objects.
  2803. /// </summary>
  2804. /// <returns>the enumerator of data objects.</returns>
  2805. public virtual System.Collections.IEnumerable GetEnumerator()
  2806. {
  2807. return GetEnumerator(this.TransactionManager.DefaultTransaction);
  2808. }
  2809. /// <summary>
  2810. /// Gets the enumerator of data objects.
  2811. /// </summary>
  2812. /// <param name="columnNames">An array of Columns.</param>
  2813. /// <returns>the enumerator of data objects.</returns>
  2814. public virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames)
  2815. {
  2816. return GetEnumerator(columnNames, this.TransactionManager.DefaultTransaction);
  2817. }
  2818. /// <summary>
  2819. /// Gets the enumerator of data objects.
  2820. /// </summary>
  2821. /// <param name="conditionCommand">Condition Command.</param>
  2822. /// <returns>the enumerator of data objects.</returns>
  2823. public virtual System.Collections.IEnumerable GetEnumerator(CommonCommand conditionCommand)
  2824. {
  2825. return GetEnumerator(conditionCommand, this.TransactionManager.DefaultTransaction);
  2826. }
  2827. /// <summary>
  2828. /// Gets the enumerator of data objects.
  2829. /// </summary>
  2830. /// <param name="columnNames">An array of Columns.</param>
  2831. /// <param name="conditionCommand">Condition Command.</param>
  2832. /// <returns>the enumerator of data objects.</returns>
  2833. public virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, CommonCommand conditionCommand)
  2834. {
  2835. return GetEnumerator(columnNames, conditionCommand, this.TransactionManager.DefaultTransaction);
  2836. }
  2837. #region Paging Operation
  2838. /// <summary>
  2839. /// Gets the enumerator of data objects.
  2840. /// </summary>
  2841. /// <param name="startRecord">The zero-based record number to start with. </param>
  2842. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2843. /// <returns>the enumerator of data objects.</returns>
  2844. public virtual System.Collections.IEnumerable GetEnumerator(int startRecord, int maxRecords)
  2845. {
  2846. return GetEnumerator(startRecord, maxRecords, this.TransactionManager.DefaultTransaction);
  2847. }
  2848. /// <summary>
  2849. /// Gets the enumerator of data objects.
  2850. /// </summary>
  2851. /// <param name="columnNames">An array of Columns.</param>
  2852. /// <param name="startRecord">The zero-based record number to start with. </param>
  2853. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2854. /// <returns>the enumerator of data objects.</returns>
  2855. public virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, int startRecord, int maxRecords)
  2856. {
  2857. return GetEnumerator(columnNames, startRecord, maxRecords, this.TransactionManager.DefaultTransaction);
  2858. }
  2859. /// <summary>
  2860. /// Gets the enumerator of data objects.
  2861. /// </summary>
  2862. /// <param name="conditionCommand">Condition Command.</param>
  2863. /// <param name="startRecord">The zero-based record number to start with. </param>
  2864. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2865. /// <returns>the enumerator of data objects.</returns>
  2866. public virtual System.Collections.IEnumerable GetEnumerator(CommonCommand conditionCommand, int startRecord, int maxRecords)
  2867. {
  2868. return GetEnumerator(conditionCommand, startRecord, maxRecords, this.TransactionManager.DefaultTransaction);
  2869. }
  2870. /// <summary>
  2871. /// Gets the enumerator of data objects.
  2872. /// </summary>
  2873. /// <param name="columnNames">An array of Columns.</param>
  2874. /// <param name="conditionCommand">Condition Command.</param>
  2875. /// <param name="startRecord">The zero-based record number to start with. </param>
  2876. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  2877. /// <returns>the enumerator of data objects.</returns>
  2878. public virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, CommonCommand conditionCommand, int startRecord, int maxRecords)
  2879. {
  2880. return GetEnumerator(columnNames, conditionCommand, startRecord, maxRecords, this.TransactionManager.DefaultTransaction);
  2881. }
  2882. #endregion
  2883. #endregion
  2884. #endregion
  2885. #endregion
  2886. #region Transaction
  2887. /// <summary>
  2888. /// Fill Data object.
  2889. /// </summary>
  2890. /// <param name="dataObject">Data object.</param>
  2891. /// <param name="primaryKeys">The value of primary key.</param>
  2892. /// <param name="transactionID">The ID of transaction.</param>
  2893. /// <returns>The result of execute command.</returns>
  2894. public virtual int Fill(object dataObject, object[] primaryKeys, string transactionID)
  2895. {
  2896. return this.Fill(dataObject, primaryKeys, this.TransactionManager.GetTransaction(transactionID));
  2897. }
  2898. /// <summary>
  2899. /// Fill Data object.
  2900. /// </summary>
  2901. /// <param name="dataObject">has primary key value Data object.</param>
  2902. /// <param name="transactionID">The ID of transaction.</param>
  2903. /// <returns>The result of execute command.</returns>
  2904. public virtual int Fill(object dataObject, string transactionID)
  2905. {
  2906. return this.Fill(dataObject, this.TransactionManager.GetTransaction(transactionID));
  2907. }
  2908. /// <summary>
  2909. /// Fill Data object.
  2910. /// </summary>
  2911. /// <param name="dataObject">Data object.</param>
  2912. /// <param name="primaryKeys">The value of primary key.</param>
  2913. /// <param name="columnNames">An array of Columns.</param>
  2914. /// <param name="transactionID">The ID of transaction.</param>
  2915. /// <returns>The result of execute command.</returns>
  2916. public virtual int Fill(object dataObject, object[] primaryKeys, string[] columnNames, string transactionID)
  2917. {
  2918. return this.Fill(dataObject, primaryKeys, columnNames, this.TransactionManager.GetTransaction(transactionID));
  2919. }
  2920. /// <summary>
  2921. /// Fill Data object.
  2922. /// </summary>
  2923. /// <param name="dataObject">has primary key value Data object.</param>
  2924. /// <param name="columnNames">An array of Columns.</param>
  2925. /// <param name="transactionID">The ID of transaction.</param>
  2926. /// <returns>The result of execute command.</returns>
  2927. public virtual int Fill(object dataObject, string[] columnNames, string transactionID)
  2928. {
  2929. return this.Fill(dataObject, columnNames, this.TransactionManager.GetTransaction(transactionID));
  2930. }
  2931. /// <summary>
  2932. /// Gets Data object.
  2933. /// </summary>
  2934. /// <param name="primaryKeys">The value of primary key.</param>
  2935. /// <param name="transactionID">The ID of transaction.</param>
  2936. /// <returns>Data object.</returns>
  2937. public virtual object GetData(object[] primaryKeys, string transactionID)
  2938. {
  2939. return this.GetData(primaryKeys, this.TransactionManager.GetTransaction(transactionID));
  2940. }
  2941. /// <summary>
  2942. /// Gets Data object.
  2943. /// </summary>
  2944. /// <param name="dataObject">has primary key value Data object.</param>
  2945. /// <param name="transactionID">The ID of transaction.</param>
  2946. /// <returns>Data object.</returns>
  2947. public virtual object GetData(object dataObject, string transactionID)
  2948. {
  2949. return this.GetData(dataObject, this.TransactionManager.GetTransaction(transactionID));
  2950. }
  2951. /// <summary>
  2952. /// Gets Data object.
  2953. /// </summary>
  2954. /// <param name="primaryKeys">The value of primary key.</param>
  2955. /// <param name="columnNames">An array of Columns.</param>
  2956. /// <param name="transactionID">The ID of transaction.</param>
  2957. /// <returns>Data object.</returns>
  2958. public virtual object GetData(object[] primaryKeys, string[] columnNames, string transactionID)
  2959. {
  2960. return this.GetData(primaryKeys, columnNames, this.TransactionManager.GetTransaction(transactionID));
  2961. }
  2962. /// <summary>
  2963. /// Gets Data object.
  2964. /// </summary>
  2965. /// <param name="dataObject">has primary key value Data object.</param>
  2966. /// <param name="columnNames">An array of Columns.</param>
  2967. /// <param name="transactionID">The ID of transaction.</param>
  2968. /// <returns>Data object.</returns>
  2969. public virtual object GetData(object dataObject, string[] columnNames, string transactionID)
  2970. {
  2971. return this.GetData(dataObject, columnNames, this.TransactionManager.GetTransaction(transactionID));
  2972. }
  2973. /// <summary>
  2974. /// Insert Data object.
  2975. /// </summary>
  2976. /// <param name="dataObject">Data object.</param>
  2977. /// <param name="transactionID">The ID of transaction.</param>
  2978. /// <returns>The count of rows that updated.</returns>
  2979. public virtual int Insert(object dataObject, string transactionID)
  2980. {
  2981. return this.Insert(dataObject, this.TransactionManager.GetTransaction(transactionID));
  2982. }
  2983. /// <summary>
  2984. /// Insert Data object.
  2985. /// </summary>
  2986. /// <param name="dataObject">Data object.</param>
  2987. /// <param name="columnNames">An array of Columns.</param>
  2988. /// <param name="transactionID">The ID of transaction.</param>
  2989. /// <returns>The count of rows that updated.</returns>
  2990. public virtual int Insert(object dataObject, string[] columnNames, string transactionID)
  2991. {
  2992. return this.Insert(dataObject, columnNames, this.TransactionManager.GetTransaction(transactionID));
  2993. }
  2994. /// <summary>
  2995. /// Delete Data object.
  2996. /// </summary>
  2997. /// <param name="dataObject">Data object.</param>
  2998. /// <param name="transactionID">The ID of transaction.</param>
  2999. /// <returns>The count of rows that updated.</returns>
  3000. public virtual int Delete(object dataObject, string transactionID)
  3001. {
  3002. return this.Delete(dataObject, this.TransactionManager.GetTransaction(transactionID));
  3003. }
  3004. /// <summary>
  3005. /// Delete Data object.
  3006. /// </summary>
  3007. /// <param name="primaryKeys">The value of primary key.</param>
  3008. /// <param name="transactionID">The ID of transaction.</param>
  3009. /// <returns>The count of rows that updated.</returns>
  3010. public virtual int Delete(object[] primaryKeys, string transactionID)
  3011. {
  3012. return this.Delete(primaryKeys, this.TransactionManager.GetTransaction(transactionID));
  3013. }
  3014. /// <summary>
  3015. /// Update Data object.
  3016. /// </summary>
  3017. /// <param name="dataObject">Data object.</param>
  3018. /// <param name="transactionID">The ID of transaction.</param>
  3019. /// <returns>The count of rows that updated.</returns>
  3020. public virtual int Update(object dataObject, string transactionID)
  3021. {
  3022. return this.Update(dataObject, this.TransactionManager.GetTransaction(transactionID));
  3023. }
  3024. /// <summary>
  3025. /// Update Data object.
  3026. /// </summary>
  3027. /// <param name="primaryKeys">The value of primary key.</param>
  3028. /// <param name="dataObject">Data object.</param>
  3029. /// <param name="transactionID">The ID of transaction.</param>
  3030. /// <returns>The count of rows that updated.</returns>
  3031. public virtual int Update(object[] primaryKeys, object dataObject, string transactionID)
  3032. {
  3033. return this.Update(primaryKeys, dataObject, this.TransactionManager.GetTransaction(transactionID));
  3034. }
  3035. /// <summary>
  3036. /// Update Data object.
  3037. /// </summary>
  3038. /// <param name="dataObject">Data object.</param>
  3039. /// <param name="columnNames">An array of Columns.</param>
  3040. /// <param name="transactionID">The ID of transaction.</param>
  3041. /// <returns>The count of rows that updated.</returns>
  3042. public virtual int Update(object dataObject, string[] columnNames, string transactionID)
  3043. {
  3044. return this.Update(dataObject, columnNames, this.TransactionManager.GetTransaction(transactionID));
  3045. }
  3046. /// <summary>
  3047. /// Update Data object.
  3048. /// </summary>
  3049. /// <param name="primaryKeys">The value of primary key.</param>
  3050. /// <param name="dataObject">Data object.</param>
  3051. /// <param name="columnNames">An array of Columns.</param>
  3052. /// <param name="transactionID">The ID of transaction.</param>
  3053. /// <returns>The count of rows that updated.</returns>
  3054. public virtual int Update(object[] primaryKeys, object dataObject, string[] columnNames, string transactionID)
  3055. {
  3056. return this.Update(primaryKeys, dataObject, columnNames, this.TransactionManager.GetTransaction(transactionID));
  3057. }
  3058. /// <summary>
  3059. /// Check data object by primary key.
  3060. /// </summary>
  3061. /// <param name="dataObject">Data object.</param>
  3062. /// <param name="transactionID">The ID of transaction.</param>
  3063. /// <returns>If exists then return true, otherwise return false.</returns>
  3064. public virtual bool Exists(object dataObject, string transactionID)
  3065. {
  3066. return this.Exists(dataObject, this.TransactionManager.GetTransaction(transactionID));
  3067. }
  3068. /// <summary>
  3069. /// Check data object by primary key.
  3070. /// </summary>
  3071. /// <param name="primaryKeys">The value of primary key.</param>
  3072. /// <param name="transactionID">The ID of transaction.</param>
  3073. /// <returns>If exists then return true, otherwise return false.</returns>
  3074. public virtual bool Exists(object[] primaryKeys, string transactionID)
  3075. {
  3076. return this.Exists(primaryKeys, this.TransactionManager.GetTransaction(transactionID));
  3077. }
  3078. /// <summary>
  3079. /// Save Data object.
  3080. /// </summary>
  3081. /// <param name="dataObject">Data object.</param>
  3082. /// <param name="transactionID">The ID of transaction.</param>
  3083. /// <returns>The count of rows that updated.</returns>
  3084. public virtual int Save(object dataObject, string transactionID)
  3085. {
  3086. return this.Save(dataObject, this.TransactionManager.GetTransaction(transactionID));
  3087. }
  3088. /// <summary>
  3089. /// Save Data object.
  3090. /// </summary>
  3091. /// <param name="dataObject">Data object.</param>
  3092. /// <param name="columnNames">An array of Columns.</param>
  3093. /// <param name="transactionID">The ID of transaction.</param>
  3094. /// <returns>The count of rows that updated.</returns>
  3095. public virtual int Save(object dataObject, string[] columnNames, string transactionID)
  3096. {
  3097. return this.Save(dataObject, columnNames, this.TransactionManager.GetTransaction(transactionID));
  3098. }
  3099. #region Batch Operation
  3100. /// <summary>
  3101. /// Gets data object column table.
  3102. /// </summary>
  3103. /// <param name="transactionID">The ID of transaction.</param>
  3104. /// <returns>data object column table.</returns>
  3105. public virtual System.Collections.IList GetDataList(string transactionID)
  3106. {
  3107. return GetDataList(this.TransactionManager.GetTransaction(transactionID));
  3108. }
  3109. /// <summary>
  3110. /// Gets data object column table.
  3111. /// </summary>
  3112. /// <param name="columnNames">An array of Columns.</param>
  3113. /// <param name="transactionID">The ID of transaction.</param>
  3114. /// <returns>data object column table.</returns>
  3115. public virtual System.Collections.IList GetDataList(string[] columnNames, string transactionID)
  3116. {
  3117. return GetDataList(columnNames, this.TransactionManager.GetTransaction(transactionID));
  3118. }
  3119. /// <summary>
  3120. /// Gets data object column table.
  3121. /// </summary>
  3122. /// <param name="conditionCommand">Condition Command.</param>
  3123. /// <param name="transactionID">The ID of transaction.</param>
  3124. /// <returns>data object column table.</returns>
  3125. public virtual System.Collections.IList GetDataList(CommonCommand conditionCommand, string transactionID)
  3126. {
  3127. return GetDataList(conditionCommand, this.TransactionManager.GetTransaction(transactionID));
  3128. }
  3129. /// <summary>
  3130. /// Gets data object column table.
  3131. /// </summary>
  3132. /// <param name="columnNames">An array of Columns.</param>
  3133. /// <param name="conditionCommand">Condition Command.</param>
  3134. /// <param name="transactionID">The ID of transaction.</param>
  3135. /// <returns>data object column table.</returns>
  3136. public virtual System.Collections.IList GetDataList(string[] columnNames, CommonCommand conditionCommand, string transactionID)
  3137. {
  3138. return GetDataList(columnNames, conditionCommand, this.TransactionManager.GetTransaction(transactionID));
  3139. }
  3140. #region Paging Operation
  3141. /// <summary>
  3142. /// Gets data object column table.
  3143. /// </summary>
  3144. /// <param name="startRecord">The zero-based record number to start with. </param>
  3145. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3146. /// <param name="transactionID">The ID of transaction.</param>
  3147. /// <returns>data object column table.</returns>
  3148. public virtual System.Collections.IList GetDataList(int startRecord, int maxRecords, string transactionID)
  3149. {
  3150. return GetDataList(startRecord, maxRecords, this.TransactionManager.GetTransaction(transactionID));
  3151. }
  3152. /// <summary>
  3153. /// Gets data object column table.
  3154. /// </summary>
  3155. /// <param name="columnNames">An array of Columns.</param>
  3156. /// <param name="startRecord">The zero-based record number to start with. </param>
  3157. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3158. /// <param name="transactionID">The ID of transaction.</param>
  3159. /// <returns>data object column table.</returns>
  3160. public virtual System.Collections.IList GetDataList(string[] columnNames, int startRecord, int maxRecords, string transactionID)
  3161. {
  3162. return GetDataList(columnNames, startRecord, maxRecords, this.TransactionManager.GetTransaction(transactionID));
  3163. }
  3164. /// <summary>
  3165. /// Gets data object column table.
  3166. /// </summary>
  3167. /// <param name="conditionCommand">Condition Command.</param>
  3168. /// <param name="startRecord">The zero-based record number to start with. </param>
  3169. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3170. /// <param name="transactionID">The ID of transaction.</param>
  3171. /// <returns>data object column table.</returns>
  3172. public virtual System.Collections.IList GetDataList(CommonCommand conditionCommand, int startRecord, int maxRecords, string transactionID)
  3173. {
  3174. return GetDataList(conditionCommand, startRecord, maxRecords, this.TransactionManager.GetTransaction(transactionID));
  3175. }
  3176. /// <summary>
  3177. /// Gets data object column table.
  3178. /// </summary>
  3179. /// <param name="columnNames">An array of Columns.</param>
  3180. /// <param name="conditionCommand">Condition Command.</param>
  3181. /// <param name="startRecord">The zero-based record number to start with. </param>
  3182. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3183. /// <param name="transactionID">The ID of transaction.</param>
  3184. /// <returns>data object column table.</returns>
  3185. public virtual System.Collections.IList GetDataList(string[] columnNames, CommonCommand conditionCommand, int startRecord, int maxRecords, string transactionID)
  3186. {
  3187. return GetDataList(columnNames, conditionCommand, startRecord, maxRecords, this.TransactionManager.GetTransaction(transactionID));
  3188. }
  3189. #endregion
  3190. #region 迭代器
  3191. /// <summary>
  3192. /// Gets the enumerator of data objects.
  3193. /// </summary>
  3194. /// <param name="transactionID">The ID of transaction.</param>
  3195. /// <returns>the enumerator of data objects.</returns>
  3196. public virtual System.Collections.IEnumerable GetEnumerator(string transactionID)
  3197. {
  3198. return GetEnumerator(this.TransactionManager.GetTransaction(transactionID));
  3199. }
  3200. /// <summary>
  3201. /// Gets the enumerator of data objects.
  3202. /// </summary>
  3203. /// <param name="columnNames">An array of Columns.</param>
  3204. /// <param name="transactionID">The ID of transaction.</param>
  3205. /// <returns>the enumerator of data objects.</returns>
  3206. public virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, string transactionID)
  3207. {
  3208. return GetEnumerator(columnNames, this.TransactionManager.GetTransaction(transactionID));
  3209. }
  3210. /// <summary>
  3211. /// Gets the enumerator of data objects.
  3212. /// </summary>
  3213. /// <param name="conditionCommand">Condition Command.</param>
  3214. /// <param name="transactionID">The ID of transaction.</param>
  3215. /// <returns>the enumerator of data objects.</returns>
  3216. public virtual System.Collections.IEnumerable GetEnumerator(CommonCommand conditionCommand, string transactionID)
  3217. {
  3218. return GetEnumerator(conditionCommand, this.TransactionManager.GetTransaction(transactionID));
  3219. }
  3220. /// <summary>
  3221. /// Gets the enumerator of data objects.
  3222. /// </summary>
  3223. /// <param name="columnNames">An array of Columns.</param>
  3224. /// <param name="conditionCommand">Condition Command.</param>
  3225. /// <param name="transactionID">The ID of transaction.</param>
  3226. /// <returns>the enumerator of data objects.</returns>
  3227. public virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, CommonCommand conditionCommand, string transactionID)
  3228. {
  3229. return GetEnumerator(columnNames, conditionCommand, this.TransactionManager.GetTransaction(transactionID));
  3230. }
  3231. #region Paging Operation
  3232. /// <summary>
  3233. /// Gets the enumerator of data objects.
  3234. /// </summary>
  3235. /// <param name="startRecord">The zero-based record number to start with. </param>
  3236. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3237. /// <param name="transactionID">The ID of transaction.</param>
  3238. /// <returns>the enumerator of data objects.</returns>
  3239. public virtual System.Collections.IEnumerable GetEnumerator(int startRecord, int maxRecords, string transactionID)
  3240. {
  3241. return GetEnumerator(startRecord, maxRecords, this.TransactionManager.GetTransaction(transactionID));
  3242. }
  3243. /// <summary>
  3244. /// Gets the enumerator of data objects.
  3245. /// </summary>
  3246. /// <param name="columnNames">An array of Columns.</param>
  3247. /// <param name="startRecord">The zero-based record number to start with. </param>
  3248. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3249. /// <param name="transactionID">The ID of transaction.</param>
  3250. /// <returns>the enumerator of data objects.</returns>
  3251. public virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, int startRecord, int maxRecords, string transactionID)
  3252. {
  3253. return GetEnumerator(columnNames, startRecord, maxRecords, this.TransactionManager.GetTransaction(transactionID));
  3254. }
  3255. /// <summary>
  3256. /// Gets the enumerator of data objects.
  3257. /// </summary>
  3258. /// <param name="conditionCommand">Condition Command.</param>
  3259. /// <param name="startRecord">The zero-based record number to start with. </param>
  3260. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3261. /// <param name="transactionID">The ID of transaction.</param>
  3262. /// <returns>the enumerator of data objects.</returns>
  3263. public virtual System.Collections.IEnumerable GetEnumerator(CommonCommand conditionCommand, int startRecord, int maxRecords, string transactionID)
  3264. {
  3265. return GetEnumerator(conditionCommand, startRecord, maxRecords, this.TransactionManager.GetTransaction(transactionID));
  3266. }
  3267. /// <summary>
  3268. /// Gets the enumerator of data objects.
  3269. /// </summary>
  3270. /// <param name="columnNames">An array of Columns.</param>
  3271. /// <param name="conditionCommand">Condition Command.</param>
  3272. /// <param name="startRecord">The zero-based record number to start with. </param>
  3273. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3274. /// <param name="transactionID">The ID of transaction.</param>
  3275. /// <returns>the enumerator of data objects.</returns>
  3276. public virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, CommonCommand conditionCommand, int startRecord, int maxRecords, string transactionID)
  3277. {
  3278. return GetEnumerator(columnNames, conditionCommand, startRecord, maxRecords, this.TransactionManager.GetTransaction(transactionID));
  3279. }
  3280. #endregion
  3281. #endregion
  3282. #endregion
  3283. #endregion
  3284. #region Extension Functions
  3285. #region Common Methods
  3286. /// <summary>
  3287. /// Fill Data object.
  3288. /// </summary>
  3289. /// <param name="dataObject">Data object.</param>
  3290. /// <param name="primaryKey">The value of primary key.</param>
  3291. /// <returns>The result of execute command.</returns>
  3292. public virtual int FillByPrimaryKey(object dataObject, object primaryKey)
  3293. {
  3294. return this.Fill(dataObject, new object[] { primaryKey });
  3295. }
  3296. /// <summary>
  3297. /// Fill Data object.
  3298. /// </summary>
  3299. /// <param name="dataObject">Data object.</param>
  3300. /// <param name="primaryKeys">The value of primary key.</param>
  3301. /// <param name="columnNames">An array of Columns.</param>
  3302. /// <returns>The result of execute command.</returns>
  3303. public virtual int FillByPrimaryKey(object dataObject, object primaryKey, string[] columnNames)
  3304. {
  3305. return this.Fill(dataObject, new object[] { primaryKey }, columnNames);
  3306. }
  3307. /// <summary>
  3308. /// Gets Data object.
  3309. /// </summary>
  3310. /// <param name="primaryKey">The value of primary key.</param>
  3311. /// <returns>Data object.</returns>
  3312. public virtual object GetDataByPrimaryKey(object primaryKey)
  3313. {
  3314. return this.GetData(new object[] { primaryKey });
  3315. }
  3316. /// <summary>
  3317. /// Gets Data object.
  3318. /// </summary>
  3319. /// <param name="primaryKey">The value of primary key.</param>
  3320. /// <param name="columnNames">An array of Columns.</param>
  3321. /// <returns>Data object.</returns>
  3322. public virtual object GetDataByPrimaryKey(object primaryKey, string[] columnNames)
  3323. {
  3324. return this.GetData(new object[] { primaryKey }, columnNames);
  3325. }
  3326. /// <summary>
  3327. /// Delete Data object.
  3328. /// </summary>
  3329. /// <param name="primaryKey">The value of primary key.</param>
  3330. /// <returns>The count of rows that updated.</returns>
  3331. public virtual int DeleteByPrimaryKey(object primaryKey)
  3332. {
  3333. return this.Delete(new object[] { primaryKey });
  3334. }
  3335. /// <summary>
  3336. /// Update Data object.
  3337. /// </summary>
  3338. /// <param name="primaryKey">The value of primary key.</param>
  3339. /// <param name="dataObject">Data object.</param>
  3340. /// <returns>The count of rows that updated.</returns>
  3341. public virtual int UpdateByPrimaryKey(object primaryKey, object dataObject)
  3342. {
  3343. return this.Update(new object[] { primaryKey }, dataObject);
  3344. }
  3345. /// <summary>
  3346. /// Update Data object.
  3347. /// </summary>
  3348. /// <param name="primaryKey">The value of primary key.</param>
  3349. /// <param name="dataObject">Data object.</param>
  3350. /// <param name="columnNames">An array of Columns.</param>
  3351. /// <returns>The count of rows that updated.</returns>
  3352. public virtual int UpdateByPrimaryKey(object primaryKey, object dataObject, string[] columnNames)
  3353. {
  3354. return this.Update(new object[] { primaryKey }, dataObject, columnNames);
  3355. }
  3356. /// <summary>
  3357. /// Check data object by primary key.
  3358. /// </summary>
  3359. /// <param name="primaryKey">The value of primary key.</param>
  3360. /// <returns>If exists then return true, otherwise return false.</returns>
  3361. public virtual bool ExistsByPrimaryKey(object primaryKey)
  3362. {
  3363. return this.Exists(new object[] { primaryKey });
  3364. }
  3365. /// <summary>
  3366. /// Gets Data object.
  3367. /// </summary>
  3368. /// <param name="conditionCommand">Condition Command.</param>
  3369. /// <returns>Data object.</returns>
  3370. public virtual object GetDataByCondition(CommonCommand conditionCommand)
  3371. {
  3372. System.Collections.IList dataList = GetDataList(conditionCommand, 0, 1);
  3373. if (dataList.Count > 0)
  3374. {
  3375. return dataList[0];
  3376. }
  3377. else
  3378. {
  3379. return null;
  3380. }
  3381. }
  3382. /// <summary>
  3383. /// Gets Data object.
  3384. /// </summary>
  3385. /// <param name="columnNames">An array of Columns.</param>
  3386. /// <param name="conditionCommand">Condition Command.</param>
  3387. /// <returns>Data object.</returns>
  3388. public virtual object GetDataByCondition(string[] columnNames, CommonCommand conditionCommand)
  3389. {
  3390. System.Collections.IList dataList = GetDataList(columnNames, conditionCommand, 0, 1);
  3391. if (dataList.Count > 0)
  3392. {
  3393. return dataList[0];
  3394. }
  3395. else
  3396. {
  3397. return null;
  3398. }
  3399. }
  3400. #region Epxression
  3401. /// <summary>
  3402. /// Gets Data object.
  3403. /// </summary>
  3404. /// <param name="conditionExpression">Condition expression</param>
  3405. /// <returns>Data object.</returns>
  3406. public virtual object GetDataByCondition(RaisingStudio.Data.Expressions.ConditionExpression conditionExpression)
  3407. {
  3408. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3409. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3410. return GetDataByCondition(conditionCommand);
  3411. }
  3412. public ConditionExpressionCommandBuilder CreateConditionExpressionCommandBuilder(ConditionExpression conditionExpression)
  3413. {
  3414. Dictionary<string, System.Data.DbType> dbTypes = GetColumnsDbTypes();
  3415. TableExpression tableExpression = GetTableExpression();
  3416. #if !(PocketPC || Smartphone || WindowsCE)
  3417. if (this._databaseType == DatabaseType.SHAREPOINT)
  3418. {
  3419. return new SharePointConditionExpressionCommandBuilder(conditionExpression, dbTypes, tableExpression);
  3420. }
  3421. else
  3422. {
  3423. #endif
  3424. return new ConditionExpressionCommandBuilder(conditionExpression, dbTypes, tableExpression);
  3425. #if !(PocketPC || Smartphone || WindowsCE)
  3426. }
  3427. #endif
  3428. }
  3429. private Dictionary<string, System.Data.DbType> GetColumnsDbTypes()
  3430. {
  3431. // TODO:
  3432. return this.CommandBuilder.CommonCommandBuilder.DbTypes;
  3433. }
  3434. private TableExpression GetTableExpression()
  3435. {
  3436. return new TableExpression(this.DefaultDataTableMapping.DataSetTable);
  3437. }
  3438. /// <summary>
  3439. /// Gets Data object.
  3440. /// </summary>
  3441. /// <param name="columnNames">An array of Columns.</param>
  3442. /// <param name="conditionExpression">Condition expression</param>
  3443. /// <returns>Data object.</returns>
  3444. public virtual object GetDataByCondition(string[] columnNames, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression)
  3445. {
  3446. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3447. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3448. return GetDataByCondition(columnNames, conditionCommand);
  3449. }
  3450. #region Batch Operation
  3451. /// <summary>
  3452. /// Gets data object column table.
  3453. /// </summary>
  3454. /// <param name="conditionExpression">Condition expression</param>
  3455. /// <returns>data object column table.</returns>
  3456. public virtual System.Collections.IList GetDataList(RaisingStudio.Data.Expressions.ConditionExpression conditionExpression)
  3457. {
  3458. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3459. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3460. return GetDataList(conditionCommand);
  3461. }
  3462. /// <summary>
  3463. /// Gets data object column table.
  3464. /// </summary>
  3465. /// <param name="columnNames">An array of Columns.</param>
  3466. /// <param name="conditionExpression">Condition expression</param>
  3467. /// <returns>data object column table.</returns>
  3468. public virtual System.Collections.IList GetDataList(string[] columnNames, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression)
  3469. {
  3470. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3471. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3472. return GetDataList(columnNames, conditionCommand);
  3473. }
  3474. #region Paging Operation
  3475. /// <summary>
  3476. /// Gets data object column table.
  3477. /// </summary>
  3478. /// <param name="conditionExpression">Condition expression</param>
  3479. /// <param name="startRecord">The zero-based record number to start with. </param>
  3480. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3481. /// <returns>data object column table.</returns>
  3482. public virtual System.Collections.IList GetDataList(RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, int startRecord, int maxRecords)
  3483. {
  3484. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3485. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3486. return GetDataList(conditionCommand, startRecord, maxRecords);
  3487. }
  3488. /// <summary>
  3489. /// Gets data object column table.
  3490. /// </summary>
  3491. /// <param name="columnNames">An array of Columns.</param>
  3492. /// <param name="conditionExpression">Condition expression</param>
  3493. /// <param name="startRecord">The zero-based record number to start with. </param>
  3494. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3495. /// <returns>data object column table.</returns>
  3496. public virtual System.Collections.IList GetDataList(string[] columnNames, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, int startRecord, int maxRecords)
  3497. {
  3498. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3499. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3500. return GetDataList(columnNames, conditionCommand, startRecord, maxRecords);
  3501. }
  3502. #endregion
  3503. #region Enumerator
  3504. /// <summary>
  3505. /// Gets the enumerator of data objects.
  3506. /// </summary>
  3507. /// <param name="conditionExpression">Condition expression</param>
  3508. /// <returns>the enumerator of data objects.</returns>
  3509. public virtual System.Collections.IEnumerable GetEnumerator(RaisingStudio.Data.Expressions.ConditionExpression conditionExpression)
  3510. {
  3511. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3512. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3513. return GetEnumerator(conditionCommand);
  3514. }
  3515. /// <summary>
  3516. /// Gets the enumerator of data objects.
  3517. /// </summary>
  3518. /// <param name="columnNames">An array of Columns.</param>
  3519. /// <param name="conditionExpression">Condition expression</param>
  3520. /// <returns>the enumerator of data objects.</returns>
  3521. public virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression)
  3522. {
  3523. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3524. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3525. return GetEnumerator(columnNames, conditionCommand);
  3526. }
  3527. #region Paging Operation
  3528. /// <summary>
  3529. /// Gets the enumerator of data objects.
  3530. /// </summary>
  3531. /// <param name="conditionExpression">Condition expression</param>
  3532. /// <param name="startRecord">The zero-based record number to start with. </param>
  3533. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3534. /// <returns>the enumerator of data objects.</returns>
  3535. public virtual System.Collections.IEnumerable GetEnumerator(RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, int startRecord, int maxRecords)
  3536. {
  3537. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3538. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3539. return GetEnumerator(conditionCommand, startRecord, maxRecords);
  3540. }
  3541. /// <summary>
  3542. /// Gets the enumerator of data objects.
  3543. /// </summary>
  3544. /// <param name="columnNames">An array of Columns.</param>
  3545. /// <param name="conditionExpression">Condition expression</param>
  3546. /// <param name="startRecord">The zero-based record number to start with. </param>
  3547. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3548. /// <returns>the enumerator of data objects.</returns>
  3549. public virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, int startRecord, int maxRecords)
  3550. {
  3551. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3552. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3553. return GetEnumerator(columnNames, conditionCommand, startRecord, maxRecords);
  3554. }
  3555. #endregion
  3556. #endregion
  3557. #endregion
  3558. #region column name Epxression
  3559. /// <summary>
  3560. /// Fill Data object.
  3561. /// </summary>
  3562. /// <param name="dataObject">Data object.</param>
  3563. /// <param name="primaryKeys">The value of primary key.</param>
  3564. /// <param name="columnExpressions">An array of column expressions.</param>
  3565. /// <returns>The result of execute command.</returns>
  3566. public virtual int Fill(object dataObject, object[] primaryKeys, ColumnExpression[] columnExpressions)
  3567. {
  3568. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3569. return this.Fill(dataObject, primaryKeys, columnNames);
  3570. }
  3571. /// <summary>
  3572. /// Fill Data object.
  3573. /// </summary>
  3574. /// <param name="dataObject">has primary key value Data object.</param>
  3575. /// <param name="columnExpressions">An array of column expressions.</param>
  3576. /// <returns>The result of execute command.</returns>
  3577. public virtual int Fill(object dataObject, ColumnExpression[] columnExpressions)
  3578. {
  3579. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3580. return this.Fill(dataObject, columnNames);
  3581. }
  3582. /// <summary>
  3583. /// Gets Data object.
  3584. /// </summary>
  3585. /// <param name="primaryKeys">The value of primary key.</param>
  3586. /// <param name="columnExpressions">An array of column expressions.</param>
  3587. /// <returns>Data object.</returns>
  3588. public virtual object GetData(object[] primaryKeys, ColumnExpression[] columnExpressions)
  3589. {
  3590. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3591. return this.GetData(primaryKeys, columnNames);
  3592. }
  3593. /// <summary>
  3594. /// Gets Data object.
  3595. /// </summary>
  3596. /// <param name="dataObject">has primary key value Data object.</param>
  3597. /// <param name="columnExpressions">An array of column expressions.</param>
  3598. /// <returns>Data object.</returns>
  3599. public virtual object GetData(object dataObject, ColumnExpression[] columnExpressions)
  3600. {
  3601. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3602. return this.GetData(dataObject, columnNames);
  3603. }
  3604. /// <summary>
  3605. /// Insert Data object.
  3606. /// </summary>
  3607. /// <param name="dataObject">Data object.</param>
  3608. /// <param name="columnExpressions">An array of column expressions.</param>
  3609. /// <returns>The count of rows that updated.</returns>
  3610. public virtual int Insert(object dataObject, ColumnExpression[] columnExpressions)
  3611. {
  3612. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3613. return this.Insert(dataObject, columnNames);
  3614. }
  3615. /// <summary>
  3616. /// Update Data object.
  3617. /// </summary>
  3618. /// <param name="dataObject">Data object.</param>
  3619. /// <param name="columnExpressions">An array of column expressions.</param>
  3620. /// <returns>The count of rows that updated.</returns>
  3621. public virtual int Update(object dataObject, ColumnExpression[] columnExpressions)
  3622. {
  3623. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3624. return this.Update(dataObject, columnNames);
  3625. }
  3626. /// <summary>
  3627. /// Update Data object.
  3628. /// </summary>
  3629. /// <param name="primaryKeys">The value of primary key.</param>
  3630. /// <param name="dataObject">Data object.</param>
  3631. /// <param name="columnExpressions">An array of column expressions.</param>
  3632. /// <returns>The count of rows that updated.</returns>
  3633. public virtual int Update(object[] primaryKeys, object dataObject, ColumnExpression[] columnExpressions)
  3634. {
  3635. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3636. return this.Update(primaryKeys, dataObject, columnNames);
  3637. }
  3638. /// <summary>
  3639. /// Save Data object.
  3640. /// </summary>
  3641. /// <param name="dataObject">Data object.</param>
  3642. /// <param name="columnExpressions">An array of column expressions.</param>
  3643. /// <returns>The count of rows that updated.</returns>
  3644. public virtual int Save(object dataObject, ColumnExpression[] columnExpressions)
  3645. {
  3646. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3647. return this.Save(dataObject, columnNames);
  3648. }
  3649. /// <summary>
  3650. /// Gets data object column table.
  3651. /// </summary>
  3652. /// <param name="columnExpressions">An array of column expressions.</param>
  3653. /// <returns>data object column table.</returns>
  3654. public virtual System.Collections.IList GetDataList(ColumnExpression[] columnExpressions)
  3655. {
  3656. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3657. return GetDataList(columnNames);
  3658. }
  3659. /// <summary>
  3660. /// Gets data object column table.
  3661. /// </summary>
  3662. /// <param name="columnExpressions">An array of column expressions.</param>
  3663. /// <param name="startRecord">The zero-based record number to start with. </param>
  3664. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3665. /// <returns>data object column table.</returns>
  3666. public virtual System.Collections.IList GetDataList(ColumnExpression[] columnExpressions, int startRecord, int maxRecords)
  3667. {
  3668. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3669. return GetDataList(columnNames, startRecord, maxRecords);
  3670. }
  3671. /// <summary>
  3672. /// Gets the enumerator of data objects.
  3673. /// </summary>
  3674. /// <param name="columnExpressions">An array of column expressions.</param>
  3675. /// <returns>the enumerator of data objects.</returns>
  3676. public virtual System.Collections.IEnumerable GetEnumerator(ColumnExpression[] columnExpressions)
  3677. {
  3678. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3679. return GetEnumerator(columnNames);
  3680. }
  3681. /// <summary>
  3682. /// Gets the enumerator of data objects.
  3683. /// </summary>
  3684. /// <param name="columnExpressions">An array of column expressions.</param>
  3685. /// <param name="startRecord">The zero-based record number to start with. </param>
  3686. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3687. /// <returns>the enumerator of data objects.</returns>
  3688. public virtual System.Collections.IEnumerable GetEnumerator(ColumnExpression[] columnExpressions, int startRecord, int maxRecords)
  3689. {
  3690. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3691. return GetEnumerator(columnNames, startRecord, maxRecords);
  3692. }
  3693. /// <summary>
  3694. /// Fill Data object.
  3695. /// </summary>
  3696. /// <param name="dataObject">Data object.</param>
  3697. /// <param name="primaryKeys">The value of primary key.</param>
  3698. /// <param name="columnExpressions">An array of column expressions.</param>
  3699. /// <returns>The result of execute command.</returns>
  3700. public virtual int FillByPrimaryKey(object dataObject, object primaryKey, ColumnExpression[] columnExpressions)
  3701. {
  3702. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3703. return this.Fill(dataObject, new object[] { primaryKey }, columnNames);
  3704. }
  3705. /// <summary>
  3706. /// Gets Data object.
  3707. /// </summary>
  3708. /// <param name="primaryKey">The value of primary key.</param>
  3709. /// <param name="columnExpressions">An array of column expressions.</param>
  3710. /// <returns>Data object.</returns>
  3711. public virtual object GetDataByPrimaryKey(object primaryKey, ColumnExpression[] columnExpressions)
  3712. {
  3713. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3714. return this.GetData(new object[] { primaryKey }, columnNames);
  3715. }
  3716. /// <summary>
  3717. /// Update Data object.
  3718. /// </summary>
  3719. /// <param name="primaryKey">The value of primary key.</param>
  3720. /// <param name="dataObject">Data object.</param>
  3721. /// <param name="columnExpressions">An array of column expressions.</param>
  3722. /// <returns>The count of rows that updated.</returns>
  3723. public virtual int UpdateByPrimaryKey(object primaryKey, object dataObject, ColumnExpression[] columnExpressions)
  3724. {
  3725. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3726. return this.Update(new object[] { primaryKey }, dataObject, columnNames);
  3727. }
  3728. /// <summary>
  3729. /// Gets Data object.
  3730. /// </summary>
  3731. /// <param name="columnExpressions">An array of column expressions.</param>
  3732. /// <param name="conditionExpression">Condition expression</param>
  3733. /// <returns>Data object.</returns>
  3734. public virtual object GetDataByCondition(ColumnExpression[] columnExpressions, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression)
  3735. {
  3736. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3737. return GetDataByCondition(columnNames, conditionExpression);
  3738. }
  3739. /// <summary>
  3740. /// Gets data object column table.
  3741. /// </summary>
  3742. /// <param name="columnExpressions">An array of column expressions.</param>
  3743. /// <param name="conditionExpression">Condition expression</param>
  3744. /// <returns>data object column table.</returns>
  3745. public virtual System.Collections.IList GetDataList(ColumnExpression[] columnExpressions, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression)
  3746. {
  3747. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3748. return GetDataList(columnNames, conditionExpression);
  3749. }
  3750. /// <summary>
  3751. /// Gets data object column table.
  3752. /// </summary>
  3753. /// <param name="columnExpressions">An array of column expressions.</param>
  3754. /// <param name="conditionExpression">Condition expression</param>
  3755. /// <param name="startRecord">The zero-based record number to start with. </param>
  3756. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3757. /// <returns>data object column table.</returns>
  3758. public virtual System.Collections.IList GetDataList(ColumnExpression[] columnExpressions, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, int startRecord, int maxRecords)
  3759. {
  3760. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3761. return GetDataList(columnNames, conditionExpression, startRecord, maxRecords);
  3762. }
  3763. /// <summary>
  3764. /// Gets the enumerator of data objects.
  3765. /// </summary>
  3766. /// <param name="columnExpressions">An array of column expressions.</param>
  3767. /// <param name="conditionExpression">Condition expression</param>
  3768. /// <returns>the enumerator of data objects.</returns>
  3769. public virtual System.Collections.IEnumerable GetEnumerator(ColumnExpression[] columnExpressions, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression)
  3770. {
  3771. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3772. return GetEnumerator(columnNames, conditionExpression);
  3773. }
  3774. /// <summary>
  3775. /// Gets the enumerator of data objects.
  3776. /// </summary>
  3777. /// <param name="columnExpressions">An array of column expressions.</param>
  3778. /// <param name="conditionExpression">Condition expression</param>
  3779. /// <param name="startRecord">The zero-based record number to start with. </param>
  3780. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3781. /// <returns>the enumerator of data objects.</returns>
  3782. public virtual System.Collections.IEnumerable GetEnumerator(ColumnExpression[] columnExpressions, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, int startRecord, int maxRecords)
  3783. {
  3784. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  3785. return GetEnumerator(columnNames, conditionExpression, startRecord, maxRecords);
  3786. }
  3787. #endregion
  3788. #endregion
  3789. #endregion
  3790. #region Transaction
  3791. /// <summary>
  3792. /// Fill Data object.
  3793. /// </summary>
  3794. /// <param name="dataObject">Data object.</param>
  3795. /// <param name="primaryKey">The value of primary key.</param>
  3796. /// <param name="transactionID">The ID of transaction.</param>
  3797. /// <returns>The result of execute command.</returns>
  3798. public virtual int FillByPrimaryKey(object dataObject, object primaryKey, string transactionID)
  3799. {
  3800. return this.Fill(dataObject, new object[] { primaryKey }, transactionID);
  3801. }
  3802. /// <summary>
  3803. /// Fill Data object.
  3804. /// </summary>
  3805. /// <param name="dataObject">Data object.</param>
  3806. /// <param name="primaryKeys">The value of primary key.</param>
  3807. /// <param name="columnNames">An array of Columns.</param>
  3808. /// <param name="transactionID">The ID of transaction.</param>
  3809. /// <returns>The result of execute command.</returns>
  3810. public virtual int FillByPrimaryKey(object dataObject, object primaryKey, string[] columnNames, string transactionID)
  3811. {
  3812. return this.Fill(dataObject, new object[] { primaryKey }, columnNames, transactionID);
  3813. }
  3814. /// <summary>
  3815. /// Gets Data object.
  3816. /// </summary>
  3817. /// <param name="primaryKey">The value of primary key.</param>
  3818. /// <param name="transactionID">The ID of transaction.</param>
  3819. /// <returns>Data object.</returns>
  3820. public virtual object GetDataByPrimaryKey(object primaryKey, string transactionID)
  3821. {
  3822. return this.GetData(new object[] { primaryKey }, transactionID);
  3823. }
  3824. /// <summary>
  3825. /// Gets Data object.
  3826. /// </summary>
  3827. /// <param name="primaryKey">The value of primary key.</param>
  3828. /// <param name="columnNames">An array of Columns.</param>
  3829. /// <param name="transactionID">The ID of transaction.</param>
  3830. /// <returns>Data object.</returns>
  3831. public virtual object GetDataByPrimaryKey(object primaryKey, string[] columnNames, string transactionID)
  3832. {
  3833. return this.GetData(new object[] { primaryKey }, columnNames, transactionID);
  3834. }
  3835. /// <summary>
  3836. /// Delete Data object.
  3837. /// </summary>
  3838. /// <param name="primaryKey">The value of primary key.</param>
  3839. /// <param name="transactionID">The ID of transaction.</param>
  3840. /// <returns>The count of rows that updated.</returns>
  3841. public virtual int DeleteByPrimaryKey(object primaryKey, string transactionID)
  3842. {
  3843. return this.Delete(new object[] { primaryKey }, transactionID);
  3844. }
  3845. /// <summary>
  3846. /// Update Data object.
  3847. /// </summary>
  3848. /// <param name="primaryKey">The value of primary key.</param>
  3849. /// <param name="dataObject">Data object.</param>
  3850. /// <param name="transactionID">The ID of transaction.</param>
  3851. /// <returns>The count of rows that updated.</returns>
  3852. public virtual int UpdateByPrimaryKey(object primaryKey, object dataObject, string transactionID)
  3853. {
  3854. return this.Update(new object[] { primaryKey }, dataObject, transactionID);
  3855. }
  3856. /// <summary>
  3857. /// Update Data object.
  3858. /// </summary>
  3859. /// <param name="primaryKey">The value of primary key.</param>
  3860. /// <param name="dataObject">Data object.</param>
  3861. /// <param name="columnNames">An array of Columns.</param>
  3862. /// <param name="transactionID">The ID of transaction.</param>
  3863. /// <returns>The count of rows that updated.</returns>
  3864. public virtual int UpdateByPrimaryKey(object primaryKey, object dataObject, string[] columnNames, string transactionID)
  3865. {
  3866. return this.Update(new object[] { primaryKey }, dataObject, columnNames, transactionID);
  3867. }
  3868. /// <summary>
  3869. /// Check data object by primary key.
  3870. /// </summary>
  3871. /// <param name="primaryKey">The value of primary key.</param>
  3872. /// <param name="transactionID">The ID of transaction.</param>
  3873. /// <returns>If exists then return true, otherwise return false.</returns>
  3874. public virtual bool ExistsByPrimaryKey(object primaryKey, string transactionID)
  3875. {
  3876. return this.Exists(new object[] { primaryKey }, transactionID);
  3877. }
  3878. /// <summary>
  3879. /// Gets Data object.
  3880. /// </summary>
  3881. /// <param name="conditionCommand">Condition Command.</param>
  3882. /// <param name="transactionID">The ID of transaction.</param>
  3883. /// <returns>Data object.</returns>
  3884. public virtual object GetDataByCondition(CommonCommand conditionCommand, string transactionID)
  3885. {
  3886. System.Collections.IList dataList = GetDataList(conditionCommand, 0, 1, transactionID);
  3887. if (dataList.Count > 0)
  3888. {
  3889. return dataList[0];
  3890. }
  3891. else
  3892. {
  3893. return null;
  3894. }
  3895. }
  3896. /// <summary>
  3897. /// Gets Data object.
  3898. /// </summary>
  3899. /// <param name="columnNames">An array of Columns.</param>
  3900. /// <param name="conditionCommand">Condition Command.</param>
  3901. /// <param name="transactionID">The ID of transaction.</param>
  3902. /// <returns>Data object.</returns>
  3903. public virtual object GetDataByCondition(string[] columnNames, CommonCommand conditionCommand, string transactionID)
  3904. {
  3905. System.Collections.IList dataList = GetDataList(columnNames, conditionCommand, 0, 1, transactionID);
  3906. if (dataList.Count > 0)
  3907. {
  3908. return dataList[0];
  3909. }
  3910. else
  3911. {
  3912. return null;
  3913. }
  3914. }
  3915. #region Epxression
  3916. /// <summary>
  3917. /// Gets Data object.
  3918. /// </summary>
  3919. /// <param name="conditionExpression">Condition expression</param>
  3920. /// <param name="transactionID">The ID of transaction.</param>
  3921. /// <returns>Data object.</returns>
  3922. public virtual object GetDataByCondition(RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, string transactionID)
  3923. {
  3924. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3925. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3926. return GetDataByCondition(conditionCommand, transactionID);
  3927. }
  3928. /// <summary>
  3929. /// Gets Data object.
  3930. /// </summary>
  3931. /// <param name="columnNames">An array of Columns.</param>
  3932. /// <param name="conditionExpression">Condition expression</param>
  3933. /// <param name="transactionID">The ID of transaction.</param>
  3934. /// <returns>Data object.</returns>
  3935. public virtual object GetDataByCondition(string[] columnNames, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, string transactionID)
  3936. {
  3937. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3938. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3939. return GetDataByCondition(columnNames, conditionCommand, transactionID);
  3940. }
  3941. #region Batch Operation
  3942. /// <summary>
  3943. /// Gets data object column table.
  3944. /// </summary>
  3945. /// <param name="conditionExpression">Condition expression</param>
  3946. /// <param name="transactionID">The ID of transaction.</param>
  3947. /// <returns>data object column table.</returns>
  3948. public virtual System.Collections.IList GetDataList(RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, string transactionID)
  3949. {
  3950. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3951. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3952. return GetDataList(conditionCommand, transactionID);
  3953. }
  3954. /// <summary>
  3955. /// Gets data object column table.
  3956. /// </summary>
  3957. /// <param name="columnNames">An array of Columns.</param>
  3958. /// <param name="conditionExpression">Condition expression</param>
  3959. /// <param name="transactionID">The ID of transaction.</param>
  3960. /// <returns>data object column table.</returns>
  3961. public virtual System.Collections.IList GetDataList(string[] columnNames, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, string transactionID)
  3962. {
  3963. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3964. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3965. return GetDataList(columnNames, conditionCommand, transactionID);
  3966. }
  3967. #region Paging Operation
  3968. /// <summary>
  3969. /// Gets data object column table.
  3970. /// </summary>
  3971. /// <param name="conditionExpression">Condition expression</param>
  3972. /// <param name="startRecord">The zero-based record number to start with. </param>
  3973. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3974. /// <param name="transactionID">The ID of transaction.</param>
  3975. /// <returns>data object column table.</returns>
  3976. public virtual System.Collections.IList GetDataList(RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, int startRecord, int maxRecords, string transactionID)
  3977. {
  3978. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3979. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3980. return GetDataList(conditionCommand, startRecord, maxRecords, transactionID);
  3981. }
  3982. /// <summary>
  3983. /// Gets data object column table.
  3984. /// </summary>
  3985. /// <param name="columnNames">An array of Columns.</param>
  3986. /// <param name="conditionExpression">Condition expression</param>
  3987. /// <param name="startRecord">The zero-based record number to start with. </param>
  3988. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  3989. /// <param name="transactionID">The ID of transaction.</param>
  3990. /// <returns>data object column table.</returns>
  3991. public virtual System.Collections.IList GetDataList(string[] columnNames, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, int startRecord, int maxRecords, string transactionID)
  3992. {
  3993. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  3994. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  3995. return GetDataList(columnNames, conditionCommand, startRecord, maxRecords, transactionID);
  3996. }
  3997. #endregion
  3998. #region 迭代器
  3999. /// <summary>
  4000. /// Gets the enumerator of data objects.
  4001. /// </summary>
  4002. /// <param name="conditionExpression">Condition expression</param>
  4003. /// <param name="transactionID">The ID of transaction.</param>
  4004. /// <param name="transactionID">The ID of transaction.</param>
  4005. /// <returns>the enumerator of data objects.</returns>
  4006. public virtual System.Collections.IEnumerable GetEnumerator(RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, string transactionID)
  4007. {
  4008. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  4009. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  4010. return GetEnumerator(conditionCommand, transactionID);
  4011. }
  4012. /// <summary>
  4013. /// Gets the enumerator of data objects.
  4014. /// </summary>
  4015. /// <param name="columnNames">An array of Columns.</param>
  4016. /// <param name="conditionExpression">Condition expression</param>
  4017. /// <param name="transactionID">The ID of transaction.</param>
  4018. /// <returns>the enumerator of data objects.</returns>
  4019. public virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, string transactionID)
  4020. {
  4021. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  4022. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  4023. return GetEnumerator(columnNames, conditionCommand, transactionID);
  4024. }
  4025. #region Paging Operation
  4026. /// <summary>
  4027. /// Gets the enumerator of data objects.
  4028. /// </summary>
  4029. /// <param name="conditionExpression">Condition expression</param>
  4030. /// <param name="startRecord">The zero-based record number to start with. </param>
  4031. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  4032. /// <param name="transactionID">The ID of transaction.</param>
  4033. /// <returns>the enumerator of data objects.</returns>
  4034. public virtual System.Collections.IEnumerable GetEnumerator(RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, int startRecord, int maxRecords, string transactionID)
  4035. {
  4036. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  4037. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  4038. return GetEnumerator(conditionCommand, startRecord, maxRecords, transactionID);
  4039. }
  4040. /// <summary>
  4041. /// Gets the enumerator of data objects.
  4042. /// </summary>
  4043. /// <param name="columnNames">An array of Columns.</param>
  4044. /// <param name="conditionExpression">Condition expression</param>
  4045. /// <param name="startRecord">The zero-based record number to start with. </param>
  4046. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  4047. /// <param name="transactionID">The ID of transaction.</param>
  4048. /// <returns>the enumerator of data objects.</returns>
  4049. public virtual System.Collections.IEnumerable GetEnumerator(string[] columnNames, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, int startRecord, int maxRecords, string transactionID)
  4050. {
  4051. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  4052. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  4053. return GetEnumerator(columnNames, conditionCommand, startRecord, maxRecords, transactionID);
  4054. }
  4055. #endregion
  4056. #endregion
  4057. #endregion
  4058. #region column name Epxression
  4059. /// <summary>
  4060. /// Fill Data object.
  4061. /// </summary>
  4062. /// <param name="dataObject">Data object.</param>
  4063. /// <param name="primaryKeys">The value of primary key.</param>
  4064. /// <param name="columnExpressions">An array of column expressions.</param>
  4065. /// <returns>The result of execute command.</returns>
  4066. public virtual int Fill(object dataObject, object[] primaryKeys, ColumnExpression[] columnExpressions, string transactionID)
  4067. {
  4068. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4069. return this.Fill(dataObject, primaryKeys, columnNames, transactionID);
  4070. }
  4071. /// <summary>
  4072. /// Fill Data object.
  4073. /// </summary>
  4074. /// <param name="dataObject">has primary key value Data object.</param>
  4075. /// <param name="columnExpressions">An array of column expressions.</param>
  4076. /// <returns>The result of execute command.</returns>
  4077. public virtual int Fill(object dataObject, ColumnExpression[] columnExpressions, string transactionID)
  4078. {
  4079. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4080. return this.Fill(dataObject, columnNames, transactionID);
  4081. }
  4082. /// <summary>
  4083. /// Gets Data object.
  4084. /// </summary>
  4085. /// <param name="primaryKeys">The value of primary key.</param>
  4086. /// <param name="columnExpressions">An array of column expressions.</param>
  4087. /// <returns>Data object.</returns>
  4088. public virtual object GetData(object[] primaryKeys, ColumnExpression[] columnExpressions, string transactionID)
  4089. {
  4090. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4091. return this.GetData(primaryKeys, columnNames, transactionID);
  4092. }
  4093. /// <summary>
  4094. /// Gets Data object.
  4095. /// </summary>
  4096. /// <param name="dataObject">has primary key value Data object.</param>
  4097. /// <param name="columnExpressions">An array of column expressions.</param>
  4098. /// <returns>Data object.</returns>
  4099. public virtual object GetData(object dataObject, ColumnExpression[] columnExpressions, string transactionID)
  4100. {
  4101. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4102. return this.GetData(dataObject, columnNames, transactionID);
  4103. }
  4104. /// <summary>
  4105. /// Insert Data object.
  4106. /// </summary>
  4107. /// <param name="dataObject">Data object.</param>
  4108. /// <param name="columnExpressions">An array of column expressions.</param>
  4109. /// <returns>The count of rows that updated.</returns>
  4110. public virtual int Insert(object dataObject, ColumnExpression[] columnExpressions, string transactionID)
  4111. {
  4112. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4113. return this.Insert(dataObject, columnNames, transactionID);
  4114. }
  4115. /// <summary>
  4116. /// Update Data object.
  4117. /// </summary>
  4118. /// <param name="dataObject">Data object.</param>
  4119. /// <param name="columnExpressions">An array of column expressions.</param>
  4120. /// <returns>The count of rows that updated.</returns>
  4121. public virtual int Update(object dataObject, ColumnExpression[] columnExpressions, string transactionID)
  4122. {
  4123. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4124. return this.Update(dataObject, columnNames, transactionID);
  4125. }
  4126. /// <summary>
  4127. /// Update Data object.
  4128. /// </summary>
  4129. /// <param name="primaryKeys">The value of primary key.</param>
  4130. /// <param name="dataObject">Data object.</param>
  4131. /// <param name="columnExpressions">An array of column expressions.</param>
  4132. /// <returns>The count of rows that updated.</returns>
  4133. public virtual int Update(object[] primaryKeys, object dataObject, ColumnExpression[] columnExpressions, string transactionID)
  4134. {
  4135. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4136. return this.Update(primaryKeys, dataObject, columnNames, transactionID);
  4137. }
  4138. /// <summary>
  4139. /// Save Data object.
  4140. /// </summary>
  4141. /// <param name="dataObject">Data object.</param>
  4142. /// <param name="columnExpressions">An array of column expressions.</param>
  4143. /// <returns>The count of rows that updated.</returns>
  4144. public virtual int Save(object dataObject, ColumnExpression[] columnExpressions, string transactionID)
  4145. {
  4146. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4147. return this.Save(dataObject, columnNames, transactionID);
  4148. }
  4149. /// <summary>
  4150. /// Gets data object column table.
  4151. /// </summary>
  4152. /// <param name="columnExpressions">An array of column expressions.</param>
  4153. /// <returns>data object column table.</returns>
  4154. public virtual System.Collections.IList GetDataList(ColumnExpression[] columnExpressions, string transactionID)
  4155. {
  4156. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4157. return GetDataList(columnNames, transactionID);
  4158. }
  4159. /// <summary>
  4160. /// Gets data object column table.
  4161. /// </summary>
  4162. /// <param name="columnExpressions">An array of column expressions.</param>
  4163. /// <param name="startRecord">The zero-based record number to start with. </param>
  4164. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  4165. /// <returns>data object column table.</returns>
  4166. public virtual System.Collections.IList GetDataList(ColumnExpression[] columnExpressions, int startRecord, int maxRecords, string transactionID)
  4167. {
  4168. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4169. return GetDataList(columnNames, startRecord, maxRecords, transactionID);
  4170. }
  4171. /// <summary>
  4172. /// Gets the enumerator of data objects.
  4173. /// </summary>
  4174. /// <param name="columnExpressions">An array of column expressions.</param>
  4175. /// <returns>the enumerator of data objects.</returns>
  4176. public virtual System.Collections.IEnumerable GetEnumerator(ColumnExpression[] columnExpressions, string transactionID)
  4177. {
  4178. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4179. return GetEnumerator(columnNames, transactionID);
  4180. }
  4181. /// <summary>
  4182. /// Gets the enumerator of data objects.
  4183. /// </summary>
  4184. /// <param name="columnExpressions">An array of column expressions.</param>
  4185. /// <param name="startRecord">The zero-based record number to start with. </param>
  4186. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  4187. /// <returns>the enumerator of data objects.</returns>
  4188. public virtual System.Collections.IEnumerable GetEnumerator(ColumnExpression[] columnExpressions, int startRecord, int maxRecords, string transactionID)
  4189. {
  4190. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4191. return GetEnumerator(columnNames, startRecord, maxRecords, transactionID);
  4192. }
  4193. /// <summary>
  4194. /// Fill Data object.
  4195. /// </summary>
  4196. /// <param name="dataObject">Data object.</param>
  4197. /// <param name="primaryKeys">The value of primary key.</param>
  4198. /// <param name="columnExpressions">An array of column expressions.</param>
  4199. /// <returns>The result of execute command.</returns>
  4200. public virtual int FillByPrimaryKey(object dataObject, object primaryKey, ColumnExpression[] columnExpressions, string transactionID)
  4201. {
  4202. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4203. return this.Fill(dataObject, new object[] { primaryKey }, columnNames, transactionID);
  4204. }
  4205. /// <summary>
  4206. /// Gets Data object.
  4207. /// </summary>
  4208. /// <param name="primaryKey">The value of primary key.</param>
  4209. /// <param name="columnExpressions">An array of column expressions.</param>
  4210. /// <returns>Data object.</returns>
  4211. public virtual object GetDataByPrimaryKey(object primaryKey, ColumnExpression[] columnExpressions, string transactionID)
  4212. {
  4213. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4214. return this.GetData(new object[] { primaryKey }, columnNames, transactionID);
  4215. }
  4216. /// <summary>
  4217. /// Update Data object.
  4218. /// </summary>
  4219. /// <param name="primaryKey">The value of primary key.</param>
  4220. /// <param name="dataObject">Data object.</param>
  4221. /// <param name="columnExpressions">An array of column expressions.</param>
  4222. /// <returns>The count of rows that updated.</returns>
  4223. public virtual int UpdateByPrimaryKey(object primaryKey, object dataObject, ColumnExpression[] columnExpressions, string transactionID)
  4224. {
  4225. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4226. return this.Update(new object[] { primaryKey }, dataObject, columnNames, transactionID);
  4227. }
  4228. /// <summary>
  4229. /// Gets Data object.
  4230. /// </summary>
  4231. /// <param name="columnExpressions">An array of column expressions.</param>
  4232. /// <param name="conditionExpression">Condition expression</param>
  4233. /// <returns>Data object.</returns>
  4234. public virtual object GetDataByCondition(ColumnExpression[] columnExpressions, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, string transactionID)
  4235. {
  4236. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4237. return GetDataByCondition(columnNames, conditionExpression, transactionID);
  4238. }
  4239. /// <summary>
  4240. /// Gets data object column table.
  4241. /// </summary>
  4242. /// <param name="columnExpressions">An array of column expressions.</param>
  4243. /// <param name="conditionExpression">Condition expression</param>
  4244. /// <returns>data object column table.</returns>
  4245. public virtual System.Collections.IList GetDataList(ColumnExpression[] columnExpressions, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, string transactionID)
  4246. {
  4247. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4248. return GetDataList(columnNames, conditionExpression, transactionID);
  4249. }
  4250. /// <summary>
  4251. /// Gets data object column table.
  4252. /// </summary>
  4253. /// <param name="columnExpressions">An array of column expressions.</param>
  4254. /// <param name="conditionExpression">Condition expression</param>
  4255. /// <param name="startRecord">The zero-based record number to start with. </param>
  4256. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  4257. /// <returns>data object column table.</returns>
  4258. public virtual System.Collections.IList GetDataList(ColumnExpression[] columnExpressions, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, int startRecord, int maxRecords, string transactionID)
  4259. {
  4260. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4261. return GetDataList(columnNames, conditionExpression, startRecord, maxRecords, transactionID);
  4262. }
  4263. /// <summary>
  4264. /// Gets the enumerator of data objects.
  4265. /// </summary>
  4266. /// <param name="columnExpressions">An array of column expressions.</param>
  4267. /// <param name="conditionExpression">Condition expression</param>
  4268. /// <returns>the enumerator of data objects.</returns>
  4269. public virtual System.Collections.IEnumerable GetEnumerator(ColumnExpression[] columnExpressions, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, string transactionID)
  4270. {
  4271. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4272. return GetEnumerator(columnNames, conditionExpression, transactionID);
  4273. }
  4274. /// <summary>
  4275. /// Gets the enumerator of data objects.
  4276. /// </summary>
  4277. /// <param name="columnExpressions">An array of column expressions.</param>
  4278. /// <param name="conditionExpression">Condition expression</param>
  4279. /// <param name="startRecord">The zero-based record number to start with. </param>
  4280. /// <param name="maxRecords">The maximum number of records to retrieve. </param>
  4281. /// <returns>the enumerator of data objects.</returns>
  4282. public virtual System.Collections.IEnumerable GetEnumerator(ColumnExpression[] columnExpressions, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression, int startRecord, int maxRecords, string transactionID)
  4283. {
  4284. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  4285. return GetEnumerator(columnNames, conditionExpression, startRecord, maxRecords, transactionID);
  4286. }
  4287. #endregion
  4288. #endregion
  4289. #endregion
  4290. #endregion
  4291. private int FillDataObjectList(System.Data.IDbCommand command, System.Collections.IList dataObjectList, System.Collections.IList columnNames, IObjectAccessor objectAccess, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes)
  4292. {
  4293. WriteLog(command);
  4294. System.Data.IDataReader dataReader = RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  4295. return FillDataObjectList(dataReader, dataObjectList, columnNames, objectAccess, propertyConverters, sourceNames, dbTypes);
  4296. }
  4297. private int FillDataObjectList(System.Data.IDbCommand command, System.Collections.IList dataObjectList, System.Collections.IList columnNames, IDataObjectProxy proxy, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes)
  4298. {
  4299. WriteLog(command);
  4300. System.Data.IDataReader dataReader = RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  4301. return FillDataObjectList(dataReader, dataObjectList, columnNames, proxy, propertyConverters, sourceNames, dbTypes);
  4302. }
  4303. private int FillDataObjectList(System.Data.IDataReader dataReader, System.Collections.IList dataObjectList, System.Collections.IList columnNames, IObjectAccessor objectAccess, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes)
  4304. {
  4305. int index = 0;
  4306. try
  4307. {
  4308. while (dataReader.Read())
  4309. {
  4310. object dataObject = CreateDataObject();
  4311. SetDataObjectValues(dataReader, columnNames, objectAccess, propertyConverters, sourceNames, dbTypes, dataObject);
  4312. dataObjectList.Add(dataObject);
  4313. index++;
  4314. }
  4315. }
  4316. finally
  4317. {
  4318. if (dataReader != null)
  4319. {
  4320. dataReader.Close();
  4321. }
  4322. }
  4323. return index;
  4324. }
  4325. public void SetDataObjectValues(System.Data.IDataReader dataReader, System.Collections.IList columnNames, IObjectAccessor objectAccess, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes, object dataObject)
  4326. {
  4327. foreach (string columnName in columnNames)
  4328. {
  4329. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceNames[columnName], dbTypes[columnName]);
  4330. if (value == System.DBNull.Value)
  4331. {
  4332. objectAccess.SetValue(dataObject, columnName, null);
  4333. }
  4334. else
  4335. {
  4336. if (propertyConverters[columnName] != null)
  4337. {
  4338. value = propertyConverters[columnName](value);
  4339. }
  4340. objectAccess.SetValue(dataObject, columnName, value);
  4341. }
  4342. }
  4343. }
  4344. public int FillDataObjectList(System.Data.IDataReader dataReader, System.Collections.IList dataObjectList, System.Collections.IList columnNames, IDataObjectProxy proxy, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes)
  4345. {
  4346. int index = 0;
  4347. try
  4348. {
  4349. while (dataReader.Read())
  4350. {
  4351. object dataObject = proxy.CreateObject();
  4352. SetDataObjectValues(dataReader, columnNames, proxy, propertyConverters, sourceNames, dbTypes, dataObject);
  4353. dataObjectList.Add(dataObject);
  4354. index++;
  4355. }
  4356. }
  4357. finally
  4358. {
  4359. if (dataReader != null)
  4360. {
  4361. dataReader.Close();
  4362. }
  4363. }
  4364. return index;
  4365. }
  4366. private int FillDataObjectList(System.Data.IDbCommand command, System.Collections.IList dataObjectList, System.Collections.IList columnNames, IObjectAccessor objectAccess, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes, int startRecord, int maxRecords)
  4367. {
  4368. WriteLog(command);
  4369. System.Data.IDataReader dataReader = RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  4370. int index = 0;
  4371. int count = 0;
  4372. try
  4373. {
  4374. while ((dataReader.Read()) && (count < maxRecords))
  4375. {
  4376. if (index >= startRecord)
  4377. {
  4378. object dataObject = CreateDataObject();
  4379. foreach (string columnName in columnNames)
  4380. {
  4381. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceNames[columnName], dbTypes[columnName]);
  4382. if (value == System.DBNull.Value)
  4383. {
  4384. objectAccess.SetValue(dataObject, columnName, null);
  4385. }
  4386. else
  4387. {
  4388. if (propertyConverters[columnName] != null)
  4389. {
  4390. value = propertyConverters[columnName](value);
  4391. }
  4392. objectAccess.SetValue(dataObject, columnName, value);
  4393. }
  4394. }
  4395. dataObjectList.Add(dataObject);
  4396. count++;
  4397. }
  4398. index++;
  4399. }
  4400. }
  4401. finally
  4402. {
  4403. if (dataReader != null)
  4404. {
  4405. dataReader.Close();
  4406. }
  4407. }
  4408. return count;
  4409. }
  4410. private System.Collections.IEnumerable GetEnumerator(System.Data.IDbCommand command, System.Collections.IList columnNames, IObjectAccessor objectAccess, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes)
  4411. {
  4412. WriteLog(command);
  4413. System.Data.IDataReader dataReader = RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  4414. return GetEnumerator(dataReader, columnNames, objectAccess, propertyConverters, sourceNames, dbTypes);
  4415. }
  4416. private System.Collections.IEnumerable GetEnumerator(System.Data.IDbCommand command, System.Collections.IList columnNames, IDataObjectProxy proxy, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes)
  4417. {
  4418. WriteLog(command);
  4419. System.Data.IDataReader dataReader = RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  4420. return GetEnumerator(dataReader, columnNames, proxy, propertyConverters, sourceNames, dbTypes);
  4421. }
  4422. private System.Collections.IEnumerable GetEnumerator(System.Data.IDataReader dataReader, System.Collections.IList columnNames, IObjectAccessor objectAccess, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes)
  4423. {
  4424. try
  4425. {
  4426. while (dataReader.Read())
  4427. {
  4428. object dataObject = CreateDataObject();
  4429. SetDataObjectValues(dataReader, columnNames, objectAccess, propertyConverters, sourceNames, dbTypes, dataObject);
  4430. yield return dataObject;
  4431. }
  4432. }
  4433. finally
  4434. {
  4435. if (dataReader != null)
  4436. {
  4437. dataReader.Close();
  4438. }
  4439. }
  4440. }
  4441. private System.Collections.IEnumerable GetEnumerator(System.Data.IDataReader dataReader, System.Collections.IList columnNames, IDataObjectProxy proxy, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes)
  4442. {
  4443. try
  4444. {
  4445. while (dataReader.Read())
  4446. {
  4447. object dataObject = proxy.CreateObject();
  4448. SetDataObjectValues(dataReader, columnNames, proxy, propertyConverters, sourceNames, dbTypes, dataObject);
  4449. yield return dataObject;
  4450. }
  4451. }
  4452. finally
  4453. {
  4454. if (dataReader != null)
  4455. {
  4456. dataReader.Close();
  4457. }
  4458. }
  4459. }
  4460. private System.Collections.IEnumerable GetEnumerator(System.Data.IDbCommand command, System.Collections.IList columnNames, IObjectAccessor objectAccess, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes, int startRecord, int maxRecords)
  4461. {
  4462. WriteLog(command);
  4463. System.Data.IDataReader dataReader = RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  4464. int index = 0;
  4465. int count = 0;
  4466. try
  4467. {
  4468. while ((dataReader.Read()) && (count < maxRecords))
  4469. {
  4470. if (index >= startRecord)
  4471. {
  4472. object dataObject = CreateDataObject();
  4473. SetDataObjectValues(dataReader, columnNames, objectAccess, propertyConverters, sourceNames, dbTypes, dataObject);
  4474. yield return dataObject;
  4475. count++;
  4476. }
  4477. index++;
  4478. }
  4479. }
  4480. finally
  4481. {
  4482. if (dataReader != null)
  4483. {
  4484. dataReader.Close();
  4485. }
  4486. }
  4487. }
  4488. public void BuildMappingInfo(System.Data.Common.DataTableMapping dataTableMapping, out List<string> columnNames, out IObjectAccessor objectAccess, out Dictionary<string, DataConverter> propertyConverters, out Dictionary<string, string> sourceNames, out Dictionary<string, System.Data.DbType> dbTypes)
  4489. {
  4490. objectAccess = GetObjectAccessor(this.dataObjectType, this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns);
  4491. columnNames = new List<string>();
  4492. propertyConverters = new Dictionary<string, DataConverter>();
  4493. sourceNames = new Dictionary<string, string>();
  4494. dbTypes = new Dictionary<string, System.Data.DbType>();
  4495. foreach (System.Data.Common.DataColumnMapping dataColumnMapping in dataTableMapping.ColumnMappings)
  4496. {
  4497. string columnName = dataColumnMapping.DataSetColumn;
  4498. System.Reflection.PropertyInfo propertyInfo = this.dataObjectType.GetProperty(columnName);
  4499. columnNames.Add(columnName);
  4500. string sourceName = dataColumnMapping.SourceColumn;
  4501. DataColumnDefinition dataColumnDefinition = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns[columnName];
  4502. System.Data.DbType dbType = dataColumnDefinition.DbType;
  4503. sourceNames.Add(columnName, sourceName);
  4504. dbTypes.Add(columnName, dbType);
  4505. propertyConverters.Add(columnName, GetDataConverter(dbType, propertyInfo.PropertyType));
  4506. }
  4507. }
  4508. public void BuildMappingInfo(System.Data.Common.DataTableMapping dataTableMapping, out List<string> columnNames, IDataObjectProxy proxy, out Dictionary<string, DataConverter> propertyConverters, out Dictionary<string, string> sourceNames, out Dictionary<string, System.Data.DbType> dbTypes)
  4509. {
  4510. columnNames = new List<string>();
  4511. propertyConverters = new Dictionary<string, DataConverter>();
  4512. sourceNames = new Dictionary<string, string>();
  4513. dbTypes = new Dictionary<string, System.Data.DbType>();
  4514. foreach (System.Data.Common.DataColumnMapping dataColumnMapping in dataTableMapping.ColumnMappings)
  4515. {
  4516. string columnName = dataColumnMapping.DataSetColumn;
  4517. columnNames.Add(columnName);
  4518. string sourceName = dataColumnMapping.SourceColumn;
  4519. DataColumnDefinition dataColumnDefinition = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns[columnName];
  4520. System.Data.DbType dbType = dataColumnDefinition.DbType;
  4521. sourceNames.Add(columnName, sourceName);
  4522. dbTypes.Add(columnName, dbType);
  4523. propertyConverters.Add(columnName, GetDataConverter(dbType, proxy.GetPropertyType(columnName)));
  4524. }
  4525. }
  4526. public void BuildMappingInfo(System.Data.Common.DataTableMapping dataTableMapping, string[] columnNames, out IObjectAccessor objectAccess, out Dictionary<string, DataConverter> propertyConverters, out Dictionary<string, string> sourceNames, out Dictionary<string, System.Data.DbType> dbTypes)
  4527. {
  4528. objectAccess = GetObjectAccessor(this.dataObjectType, this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns);
  4529. propertyConverters = new Dictionary<string, DataConverter>();
  4530. sourceNames = new Dictionary<string, string>();
  4531. dbTypes = new Dictionary<string, System.Data.DbType>();
  4532. foreach (string columnName in columnNames)
  4533. {
  4534. System.Reflection.PropertyInfo propertyInfo = this.dataObjectType.GetProperty(columnName);
  4535. DataColumnDefinition dataColumnDefinition = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns[columnName];
  4536. string sourceName = RaisingStudio.Data.Common.Builders.CommonCommandBuilder.GetDataColumnSourceColumn(dataTableMapping, columnName);
  4537. System.Data.DbType dbType = dataColumnDefinition.DbType;
  4538. sourceNames.Add(columnName, sourceName);
  4539. dbTypes.Add(columnName, dbType);
  4540. propertyConverters.Add(columnName, GetDataConverter(dbType, propertyInfo.PropertyType));
  4541. }
  4542. }
  4543. public void BuildMappingInfo(System.Data.Common.DataTableMapping dataTableMapping, string[] columnNames, IDataObjectProxy proxy, out Dictionary<string, DataConverter> propertyConverters, out Dictionary<string, string> sourceNames, out Dictionary<string, System.Data.DbType> dbTypes)
  4544. {
  4545. propertyConverters = new Dictionary<string, DataConverter>();
  4546. sourceNames = new Dictionary<string, string>();
  4547. dbTypes = new Dictionary<string, System.Data.DbType>();
  4548. foreach (string columnName in columnNames)
  4549. {
  4550. System.Reflection.PropertyInfo propertyInfo = this.dataObjectType.GetProperty(columnName);
  4551. DataColumnDefinition dataColumnDefinition = this.CommandBuilder.CommonCommandBuilder.DataTableDefinition.Columns[columnName];
  4552. string sourceName = RaisingStudio.Data.Common.Builders.CommonCommandBuilder.GetDataColumnSourceColumn(dataTableMapping, columnName);
  4553. System.Data.DbType dbType = dataColumnDefinition.DbType;
  4554. sourceNames.Add(columnName, sourceName);
  4555. dbTypes.Add(columnName, dbType);
  4556. propertyConverters.Add(columnName, GetDataConverter(dbType, proxy.GetPropertyType(columnName)));
  4557. }
  4558. }
  4559. public System.Collections.IEnumerable GetEnumerator(System.Data.IDataReader dataReader, List<string> columnNames, Dictionary<string, System.Reflection.PropertyInfo> propertyInfos, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes)
  4560. {
  4561. try
  4562. {
  4563. while (dataReader.Read())
  4564. {
  4565. object dataObject = CreateDataObject();
  4566. SetDataObjectValues(dataReader, columnNames, propertyInfos, propertyConverters, sourceNames, dbTypes, dataObject);
  4567. yield return dataObject;
  4568. }
  4569. }
  4570. finally
  4571. {
  4572. if (dataReader != null)
  4573. {
  4574. dataReader.Close();
  4575. }
  4576. }
  4577. }
  4578. public System.Collections.IEnumerable GetEnumerator(System.Data.IDataReader dataReader, List<string> columnNames, Dictionary<string, System.Reflection.PropertyInfo> propertyInfos, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes, int startRecord, int maxRecords)
  4579. {
  4580. int index = 0;
  4581. int count = 0;
  4582. try
  4583. {
  4584. while ((dataReader.Read()) && (count < maxRecords))
  4585. {
  4586. if (index >= startRecord)
  4587. {
  4588. object dataObject = CreateDataObject();
  4589. SetDataObjectValues(dataReader, columnNames, propertyInfos, propertyConverters, sourceNames, dbTypes, dataObject);
  4590. yield return dataObject;
  4591. count++;
  4592. }
  4593. index++;
  4594. }
  4595. }
  4596. finally
  4597. {
  4598. if (dataReader != null)
  4599. {
  4600. dataReader.Close();
  4601. }
  4602. }
  4603. }
  4604. public void SetDataObjectValues(System.Data.IDataReader dataReader, List<string> columnNames, Dictionary<string, System.Reflection.PropertyInfo> propertyInfos, Dictionary<string, DataConverter> propertyConverters, Dictionary<string, string> sourceNames, Dictionary<string, System.Data.DbType> dbTypes, object dataObject)
  4605. {
  4606. foreach (string columnName in columnNames)
  4607. {
  4608. string sourceName = sourceNames[columnName];
  4609. System.Data.DbType dbType = dbTypes[columnName];
  4610. System.Reflection.PropertyInfo propertyInfo = propertyInfos[columnName];
  4611. if (propertyInfo != null)
  4612. {
  4613. object value = DataItemAdapter.GetDataReaderValue(dataReader, sourceName, dbType);
  4614. if (value == System.DBNull.Value)
  4615. {
  4616. propertyInfo.SetValue(dataObject, null, null);
  4617. }
  4618. else
  4619. {
  4620. value = ConvertDataValue(dbType, propertyInfo.PropertyType, value);
  4621. propertyInfo.SetValue(dataObject, value, null);
  4622. }
  4623. }
  4624. else
  4625. {
  4626. throw new System.MissingMemberException(string.Format("Can not find a property named {1} in type {0}.", dataObjectType, columnName));
  4627. }
  4628. }
  4629. }
  4630. private int Update(object dataObject, System.Data.Common.DataTableMapping dataTableMapping, System.Data.IDbCommand command)
  4631. {
  4632. int columnCount = dataTableMapping.ColumnMappings.Count;
  4633. if (UseDynamicProxy)
  4634. {
  4635. #region UseDynamicProxy
  4636. System.Type dataObjectType = dataObject.GetType();
  4637. IObjectAccessor objectAccessor = GetObjectAccessor(dataObjectType, this.DefaultDataTableMapping.ColumnMappings);
  4638. SetParameterValues(dataObject, command, dataObjectType, columnCount, objectAccessor);
  4639. #endregion
  4640. }
  4641. else
  4642. {
  4643. if (dataObject is IDataObjectProxy)
  4644. {
  4645. #region IObjectAccessor
  4646. IObjectAccessor objectAccessor = dataObject as IObjectAccessor;
  4647. SetParameterValues(dataObject, command, dataObject as IDataObjectProxy, columnCount, objectAccessor);
  4648. #endregion
  4649. }
  4650. else
  4651. {
  4652. #region Reflection
  4653. System.Type dataObjectType = dataObject.GetType();
  4654. SetParameterValues(dataObject, command, dataObjectType, columnCount);
  4655. #endregion
  4656. }
  4657. }
  4658. if (this.TransactionManager.DefaultTransaction != null)
  4659. {
  4660. command.Transaction = this.TransactionManager.DefaultTransaction;
  4661. }
  4662. WriteLog(command);
  4663. return RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(command);
  4664. }
  4665. private void SetParameterValues(object dataObject, System.Data.IDbCommand command, System.Type dataObjectType, int columnCount)
  4666. {
  4667. int i = 0;
  4668. foreach (System.Data.IDbDataParameter parameter in command.Parameters)
  4669. {
  4670. if (!GetSourceColumnNullMapping(parameter))
  4671. {
  4672. string columnName = parameter.SourceColumn;
  4673. System.Reflection.PropertyInfo propertyInfo = dataObjectType.GetProperty(columnName);
  4674. if (propertyInfo != null)
  4675. {
  4676. object value = propertyInfo.GetValue(dataObject, null);
  4677. if (value == null)
  4678. {
  4679. parameter.Value = System.DBNull.Value;
  4680. }
  4681. else
  4682. {
  4683. value = ConvertDataValue(propertyInfo.PropertyType, parameter.DbType, value);
  4684. parameter.Value = value;
  4685. }
  4686. }
  4687. else
  4688. {
  4689. throw new System.MissingMemberException(string.Format("Can not find a property named {1} in type {0}.", dataObjectType, columnName));
  4690. }
  4691. i++;
  4692. if (i >= columnCount)
  4693. {
  4694. break;
  4695. }
  4696. }
  4697. }
  4698. }
  4699. private void SetParameterValues(object dataObject, System.Data.IDbCommand command, System.Type dataObjectType, int columnCount, IObjectAccessor objectAccessor)
  4700. {
  4701. int i = 0;
  4702. if (objectAccessor != null)
  4703. {
  4704. foreach (System.Data.IDbDataParameter parameter in command.Parameters)
  4705. {
  4706. if (!GetSourceColumnNullMapping(parameter))
  4707. {
  4708. string columnName = parameter.SourceColumn;
  4709. object value = objectAccessor.GetValue(dataObject, columnName);
  4710. if (value == null)
  4711. {
  4712. parameter.Value = System.DBNull.Value;
  4713. }
  4714. else
  4715. {
  4716. Type propertyType = GetDataObjectPropertyType(dataObjectType, columnName);
  4717. value = ConvertDataValue(propertyType, parameter.DbType, value);
  4718. parameter.Value = value;
  4719. }
  4720. i++;
  4721. if (i >= columnCount)
  4722. {
  4723. break;
  4724. }
  4725. }
  4726. }
  4727. }
  4728. else
  4729. {
  4730. // TODO: exception.
  4731. throw new ObjectAccessorException(string.Format("Can't get ObjectAccessor for type [{0}].", dataObjectType));
  4732. }
  4733. }
  4734. private void SetParameterValues(object dataObject, System.Data.IDbCommand command, IDataObjectProxy proxy, int columnCount, IObjectAccessor objectAccessor)
  4735. {
  4736. int i = 0;
  4737. if (objectAccessor != null)
  4738. {
  4739. foreach (System.Data.IDbDataParameter parameter in command.Parameters)
  4740. {
  4741. if (!GetSourceColumnNullMapping(parameter))
  4742. {
  4743. string columnName = parameter.SourceColumn;
  4744. object value = objectAccessor.GetValue(dataObject, columnName);
  4745. if (value == null)
  4746. {
  4747. parameter.Value = System.DBNull.Value;
  4748. }
  4749. else
  4750. {
  4751. Type propertyType = proxy.GetPropertyType(columnName);
  4752. value = ConvertDataValue(propertyType, parameter.DbType, value);
  4753. parameter.Value = value;
  4754. }
  4755. i++;
  4756. if (i >= columnCount)
  4757. {
  4758. break;
  4759. }
  4760. }
  4761. }
  4762. }
  4763. else
  4764. {
  4765. // TODO: exception.
  4766. throw new ObjectAccessorException(string.Format("Can't get ObjectAccessor for type [{0}].", dataObjectType));
  4767. }
  4768. }
  4769. public int UpdateByCondition(object dataObject, ConditionExpression condition)
  4770. {
  4771. System.Data.Common.DataTableMapping dataTableMapping = this.DefaultDataTableMapping;
  4772. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(condition);
  4773. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  4774. System.Data.IDbCommand command = this.CommandBuilder.GetUpdateCommand(dataTableMapping, conditionCommand);
  4775. return Update(dataObject, dataTableMapping, command);
  4776. }
  4777. public int UpdateByCondition(object dataObject, CommonCommand conditionCommand)
  4778. {
  4779. System.Data.Common.DataTableMapping dataTableMapping = this.DefaultDataTableMapping;
  4780. System.Data.IDbCommand command = this.CommandBuilder.GetUpdateCommand(dataTableMapping, conditionCommand);
  4781. return Update(dataObject, dataTableMapping, command);
  4782. }
  4783. public int UpdateByCondition(object dataObject, ColumnExpression[] columns, ConditionExpression condition)
  4784. {
  4785. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columns);
  4786. System.Data.Common.DataTableMapping dataTableMapping = this.CommandBuilder.CommonCommandBuilder.GetDataTableMapping(columnNames);
  4787. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(condition);
  4788. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  4789. System.Data.IDbCommand command = this.CommandBuilder.GetUpdateCommand(dataTableMapping, conditionCommand);
  4790. return Update(dataObject, dataTableMapping, command);
  4791. }
  4792. public int UpdateByCondition(object dataObject, ColumnExpression[] columns, CommonCommand conditionCommand)
  4793. {
  4794. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columns);
  4795. System.Data.Common.DataTableMapping dataTableMapping = this.CommandBuilder.CommonCommandBuilder.GetDataTableMapping(columnNames);
  4796. System.Data.IDbCommand command = this.CommandBuilder.GetUpdateCommand(dataTableMapping, conditionCommand);
  4797. return Update(dataObject, dataTableMapping, command);
  4798. }
  4799. #region Bulk operation
  4800. public virtual int Insert(System.Collections.IList dataObjectList)
  4801. {
  4802. return this.Insert(dataObjectList, this.TransactionManager.DefaultTransaction);
  4803. }
  4804. protected virtual int Insert(System.Collections.IList dataObjectList, System.Data.IDbTransaction transaction)
  4805. {
  4806. System.Data.IDbCommand command = null;
  4807. if (CacheDefalutCommand)
  4808. {
  4809. if (_defalutInsertCommand == null)
  4810. {
  4811. _defalutInsertCommand = this.CommandBuilder.GetInsertCommand(this.DefaultDataTableMapping, false);
  4812. }
  4813. command = _defalutInsertCommand;
  4814. }
  4815. else
  4816. {
  4817. command = this.CommandBuilder.GetInsertCommand(this.DefaultDataTableMapping, false);
  4818. }
  4819. if (transaction != null)
  4820. {
  4821. command.Transaction = transaction;
  4822. }
  4823. int count = 0;
  4824. foreach (object dataObject in dataObjectList)
  4825. {
  4826. SetInsertCommandParameterValues(dataObject, command);
  4827. WriteLog(command);
  4828. count += RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(command);
  4829. }
  4830. return count;
  4831. }
  4832. public virtual int Insert(System.Collections.IList dataObjectList, ColumnExpression[] columns)
  4833. {
  4834. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columns);
  4835. return this.Insert(dataObjectList, columnNames, this.TransactionManager.DefaultTransaction);
  4836. }
  4837. protected virtual int Insert(System.Collections.IList dataObjectList, string[] columnNames, System.Data.IDbTransaction transaction)
  4838. {
  4839. System.Data.Common.DataTableMapping dataTableMapping = this.CommandBuilder.CommonCommandBuilder.GetDataTableMapping(columnNames);
  4840. System.Data.IDbCommand command = this.CommandBuilder.GetInsertCommand(dataTableMapping, false);
  4841. if (transaction != null)
  4842. {
  4843. command.Transaction = transaction;
  4844. }
  4845. int count = 0;
  4846. foreach (object dataObject in dataObjectList)
  4847. {
  4848. SetInsertCommandParameterValues(dataObject, command);
  4849. WriteLog(command);
  4850. count += RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(command);
  4851. }
  4852. return count;
  4853. }
  4854. public virtual int Update(System.Collections.IList dataObjectList)
  4855. {
  4856. return this.Update(dataObjectList, this.TransactionManager.DefaultTransaction);
  4857. }
  4858. protected virtual int Update(System.Collections.IList dataObjectList, System.Data.IDbTransaction transaction)
  4859. {
  4860. System.Data.IDbCommand command = null;
  4861. if (CacheDefalutCommand)
  4862. {
  4863. if (_defalutUpdateCommand == null)
  4864. {
  4865. _defalutUpdateCommand = this.CommandBuilder.GetUpdateCommand(this.DefaultDataTableMapping, false, false);
  4866. }
  4867. command = _defalutUpdateCommand;
  4868. }
  4869. else
  4870. {
  4871. command = this.CommandBuilder.GetUpdateCommand(this.DefaultDataTableMapping, false, false);
  4872. }
  4873. if (transaction != null)
  4874. {
  4875. command.Transaction = transaction;
  4876. }
  4877. int count = 0;
  4878. foreach (object dataObject in dataObjectList)
  4879. {
  4880. SetUpdateCommandParameterValues(dataObject, command);
  4881. WriteLog(command);
  4882. count += RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(command);
  4883. }
  4884. return count;
  4885. }
  4886. public virtual int Update(System.Collections.IList dataObjectList, ColumnExpression[] columns)
  4887. {
  4888. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columns);
  4889. return this.Update(dataObjectList, columnNames, this.TransactionManager.DefaultTransaction);
  4890. }
  4891. protected virtual int Update(System.Collections.IList dataObjectList, string[] columnNames, System.Data.IDbTransaction transaction)
  4892. {
  4893. System.Data.Common.DataTableMapping dataTableMapping = this.CommandBuilder.CommonCommandBuilder.GetDataTableMapping(columnNames);
  4894. System.Data.IDbCommand command = this.CommandBuilder.GetUpdateCommand(dataTableMapping, false, false);
  4895. if (transaction != null)
  4896. {
  4897. command.Transaction = transaction;
  4898. }
  4899. int count = 0;
  4900. foreach (object dataObject in dataObjectList)
  4901. {
  4902. SetUpdateCommandParameterValues(dataObject, command);
  4903. WriteLog(command);
  4904. count += RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(command);
  4905. }
  4906. return count;
  4907. }
  4908. public virtual int Save(System.Collections.IList dataObjectList)
  4909. {
  4910. return this.Save(dataObjectList, this.TransactionManager.DefaultTransaction);
  4911. }
  4912. protected virtual int Save(System.Collections.IList dataObjectList, System.Data.IDbTransaction transaction)
  4913. {
  4914. System.Data.IDbCommand existsCommand = GetExistsCommand(transaction);
  4915. System.Data.IDbCommand insertCommand = GetInsertCommand(transaction);
  4916. System.Data.IDbCommand updateCommand = GetUpdateCommand(transaction);
  4917. int count = 0;
  4918. foreach (object dataObject in dataObjectList)
  4919. {
  4920. object[] primaryKeys = GetPrimaryKeys(dataObject);
  4921. int i = 0;
  4922. foreach (System.Data.IDbDataParameter parameter in existsCommand.Parameters)
  4923. {
  4924. parameter.Value = primaryKeys[i];
  4925. i++;
  4926. }
  4927. WriteLog(existsCommand);
  4928. int existsCount = Convert.ToInt32(RaisingStudio.Data.Common.Database.ExecuteScalarCommand(existsCommand));
  4929. if (existsCount > 0)
  4930. {
  4931. SetUpdateCommandParameterValues(dataObject, updateCommand);
  4932. WriteLog(updateCommand);
  4933. count += RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(updateCommand);
  4934. }
  4935. else
  4936. {
  4937. SetInsertCommandParameterValues(dataObject, insertCommand);
  4938. WriteLog(insertCommand);
  4939. count += RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(insertCommand);
  4940. }
  4941. }
  4942. return count;
  4943. }
  4944. private System.Data.IDbCommand GetExistsCommand(System.Data.IDbTransaction transaction)
  4945. {
  4946. System.Data.IDbCommand existsCommand = null;
  4947. if (CacheDefalutCommand)
  4948. {
  4949. if (_defaultExistsCommand == null)
  4950. {
  4951. _defaultExistsCommand = this.CommandBuilder.GetExistsCommand(this.DefaultDataTableMapping);
  4952. }
  4953. existsCommand = _defaultExistsCommand;
  4954. }
  4955. else
  4956. {
  4957. existsCommand = this.CommandBuilder.GetExistsCommand(this.DefaultDataTableMapping);
  4958. }
  4959. if (transaction != null)
  4960. {
  4961. existsCommand.Transaction = transaction;
  4962. }
  4963. return existsCommand;
  4964. }
  4965. private System.Data.IDbCommand GetUpdateCommand(System.Data.IDbTransaction transaction)
  4966. {
  4967. System.Data.IDbCommand updateCommand = null;
  4968. if (CacheDefalutCommand)
  4969. {
  4970. if (_defalutUpdateCommand == null)
  4971. {
  4972. _defalutUpdateCommand = this.CommandBuilder.GetUpdateCommand(this.DefaultDataTableMapping, false, false);
  4973. }
  4974. updateCommand = _defalutUpdateCommand;
  4975. }
  4976. else
  4977. {
  4978. updateCommand = this.CommandBuilder.GetUpdateCommand(this.DefaultDataTableMapping, false, false);
  4979. }
  4980. if (transaction != null)
  4981. {
  4982. updateCommand.Transaction = transaction;
  4983. }
  4984. return updateCommand;
  4985. }
  4986. private System.Data.IDbCommand GetInsertCommand(System.Data.IDbTransaction transaction)
  4987. {
  4988. System.Data.IDbCommand insertCommand = null;
  4989. if (CacheDefalutCommand)
  4990. {
  4991. if (_defalutInsertCommand == null)
  4992. {
  4993. _defalutInsertCommand = this.CommandBuilder.GetInsertCommand(this.DefaultDataTableMapping, false);
  4994. }
  4995. insertCommand = _defalutInsertCommand;
  4996. }
  4997. else
  4998. {
  4999. insertCommand = this.CommandBuilder.GetInsertCommand(this.DefaultDataTableMapping, false);
  5000. }
  5001. if (transaction != null)
  5002. {
  5003. insertCommand.Transaction = transaction;
  5004. }
  5005. return insertCommand;
  5006. }
  5007. public virtual int Save(System.Collections.IList dataObjectList, ColumnExpression[] columns)
  5008. {
  5009. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columns);
  5010. return this.Save(dataObjectList, columnNames, this.TransactionManager.DefaultTransaction);
  5011. }
  5012. protected virtual int Save(System.Collections.IList dataObjectList, string[] columnNames, System.Data.IDbTransaction transaction)
  5013. {
  5014. System.Data.IDbCommand existsCommand = GetExistsCommand(transaction);
  5015. System.Data.Common.DataTableMapping dataTableMapping = this.CommandBuilder.CommonCommandBuilder.GetDataTableMapping(columnNames);
  5016. System.Data.IDbCommand insertCommand = this.CommandBuilder.GetInsertCommand(dataTableMapping, false);
  5017. if (transaction != null)
  5018. {
  5019. insertCommand.Transaction = transaction;
  5020. }
  5021. System.Data.IDbCommand updateCommand = this.CommandBuilder.GetUpdateCommand(dataTableMapping, false, false);
  5022. if (transaction != null)
  5023. {
  5024. updateCommand.Transaction = transaction;
  5025. }
  5026. int count = 0;
  5027. foreach (object dataObject in dataObjectList)
  5028. {
  5029. object[] primaryKeys = GetPrimaryKeys(dataObject);
  5030. int i = 0;
  5031. foreach (System.Data.IDbDataParameter parameter in existsCommand.Parameters)
  5032. {
  5033. parameter.Value = primaryKeys[i];
  5034. i++;
  5035. }
  5036. WriteLog(existsCommand);
  5037. int existsCount = Convert.ToInt32(RaisingStudio.Data.Common.Database.ExecuteScalarCommand(existsCommand));
  5038. if (existsCount > 0)
  5039. {
  5040. SetUpdateCommandParameterValues(dataObject, updateCommand);
  5041. WriteLog(updateCommand);
  5042. count += RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(updateCommand);
  5043. }
  5044. else
  5045. {
  5046. SetInsertCommandParameterValues(dataObject, insertCommand);
  5047. WriteLog(insertCommand);
  5048. count += RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(insertCommand);
  5049. }
  5050. }
  5051. return count;
  5052. }
  5053. public virtual int Exists(System.Collections.IList dataObjectList)
  5054. {
  5055. return this.Exists(dataObjectList, this.TransactionManager.DefaultTransaction);
  5056. }
  5057. protected virtual int Exists(System.Collections.IList dataObjectList, System.Data.IDbTransaction transaction)
  5058. {
  5059. System.Data.IDbCommand existsCommand = GetExistsCommand(transaction);
  5060. int count = 0;
  5061. foreach (object dataObject in dataObjectList)
  5062. {
  5063. object[] primaryKeys = GetPrimaryKeys(dataObject);
  5064. int i = 0;
  5065. foreach (System.Data.IDbDataParameter parameter in existsCommand.Parameters)
  5066. {
  5067. parameter.Value = primaryKeys[i];
  5068. i++;
  5069. }
  5070. WriteLog(existsCommand);
  5071. int existsCount = Convert.ToInt32(RaisingStudio.Data.Common.Database.ExecuteScalarCommand(existsCommand));
  5072. if (existsCount > 0)
  5073. {
  5074. count++;
  5075. }
  5076. }
  5077. return count;
  5078. }
  5079. public virtual int Delete(System.Collections.IList dataObjectList)
  5080. {
  5081. return this.Delete(dataObjectList, this.TransactionManager.DefaultTransaction);
  5082. }
  5083. protected virtual int Delete(System.Collections.IList dataObjectList, System.Data.IDbTransaction transaction)
  5084. {
  5085. System.Data.IDbCommand deleteCommand = GetDeleteCommand(transaction);
  5086. int count = 0;
  5087. foreach (object dataObject in dataObjectList)
  5088. {
  5089. object[] primaryKeys = GetPrimaryKeys(dataObject);
  5090. int i = 0;
  5091. foreach (System.Data.IDbDataParameter parameter in deleteCommand.Parameters)
  5092. {
  5093. parameter.Value = primaryKeys[i];
  5094. i++;
  5095. }
  5096. WriteLog(deleteCommand);
  5097. int deleteCount = RaisingStudio.Data.Common.Database.ExecuteNonQueryCommand(deleteCommand);
  5098. if (deleteCount > 0)
  5099. {
  5100. count++;
  5101. }
  5102. }
  5103. return count;
  5104. }
  5105. private System.Data.IDbCommand GetDeleteCommand(System.Data.IDbTransaction transaction)
  5106. {
  5107. System.Data.IDbCommand command = null;
  5108. if (CacheDefalutCommand)
  5109. {
  5110. if (_defaultDeleteCommand == null)
  5111. {
  5112. _defaultDeleteCommand = this.CommandBuilder.GetDeleteCommand(this.DefaultDataTableMapping, false);
  5113. }
  5114. command = _defaultDeleteCommand;
  5115. }
  5116. else
  5117. {
  5118. command = this.CommandBuilder.GetDeleteCommand(this.DefaultDataTableMapping, false);
  5119. }
  5120. return command;
  5121. }
  5122. #endregion
  5123. /// <summary>
  5124. /// Gets data object column table.
  5125. /// </summary>
  5126. /// <param name="transaction">Database transaction.</param>
  5127. /// <returns>data object column table.</returns>
  5128. protected virtual IDataReader GetDataReader(System.Data.IDbTransaction transaction)
  5129. {
  5130. System.Data.Common.DataTableMapping dataTableMapping;
  5131. System.Data.IDbCommand command = null;
  5132. if (CacheDefalutCommand)
  5133. {
  5134. if (_defalutSelectCommand == null)
  5135. {
  5136. _defalutSelectCommand = this.CommandBuilder.GetSelectCommand(out _defaultDataTableMapping);
  5137. }
  5138. dataTableMapping = _defaultDataTableMapping;
  5139. command = _defalutSelectCommand;
  5140. }
  5141. else
  5142. {
  5143. command = this.CommandBuilder.GetSelectCommand(out dataTableMapping); ;
  5144. }
  5145. #if !(PocketPC || Smartphone || WindowsCE)
  5146. if (this.DatabaseType == DatabaseType.SHAREPOINT)
  5147. {
  5148. (command as System.Data.SharePoint.SharePointCommand).ListUrl = dataTableMapping.SourceTable;
  5149. }
  5150. #endif
  5151. if (transaction != null)
  5152. {
  5153. command.Transaction = transaction;
  5154. }
  5155. WriteLog(command);
  5156. return RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  5157. }
  5158. /// <summary>
  5159. /// Gets data object column table.
  5160. /// </summary>
  5161. /// <param name="columnNames">An array of Columns.</param>
  5162. /// <param name="transaction">Database transaction.</param>
  5163. /// <returns>data object column table.</returns>
  5164. protected virtual IDataReader GetDataReader(string[] columnNames, System.Data.IDbTransaction transaction)
  5165. {
  5166. System.Data.Common.DataTableMapping dataTableMapping;
  5167. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(columnNames, out dataTableMapping);
  5168. #if !(PocketPC || Smartphone || WindowsCE)
  5169. if (this.DatabaseType == DatabaseType.SHAREPOINT)
  5170. {
  5171. (command as System.Data.SharePoint.SharePointCommand).ListUrl = dataTableMapping.SourceTable;
  5172. }
  5173. #endif
  5174. if (transaction != null)
  5175. {
  5176. command.Transaction = transaction;
  5177. }
  5178. WriteLog(command);
  5179. return RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  5180. }
  5181. /// <summary>
  5182. /// Gets data object column table.
  5183. /// </summary>
  5184. /// <returns>data object column table.</returns>
  5185. public virtual IDataReader GetDataReader()
  5186. {
  5187. return GetDataReader(this.TransactionManager.DefaultTransaction);
  5188. }
  5189. /// <summary>
  5190. /// Gets data object column table.
  5191. /// </summary>
  5192. /// <param name="columnNames">An array of Columns.</param>
  5193. /// <returns>data object column table.</returns>
  5194. public virtual IDataReader GetDataReader(string[] columnNames)
  5195. {
  5196. return GetDataReader(columnNames, this.TransactionManager.DefaultTransaction);
  5197. }
  5198. /// <summary>
  5199. /// Gets data object column table.
  5200. /// </summary>
  5201. /// <param name="conditionCommand">Condition Command.</param>
  5202. /// <param name="transaction">Database transaction.</param>
  5203. /// <returns>data object column table.</returns>
  5204. protected virtual IDataReader GetDataReader(CommonCommand conditionCommand, System.Data.IDbTransaction transaction)
  5205. {
  5206. System.Data.Common.DataTableMapping dataTableMapping;
  5207. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(conditionCommand, out dataTableMapping);
  5208. #if !(PocketPC || Smartphone || WindowsCE)
  5209. if (this.DatabaseType == DatabaseType.SHAREPOINT)
  5210. {
  5211. (command as System.Data.SharePoint.SharePointCommand).ListUrl = dataTableMapping.SourceTable;
  5212. }
  5213. #endif
  5214. if (transaction != null)
  5215. {
  5216. command.Transaction = transaction;
  5217. }
  5218. WriteLog(command);
  5219. return RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  5220. }
  5221. /// <summary>
  5222. /// Gets data object column table.
  5223. /// </summary>
  5224. /// <param name="conditionExpression">Condition expression</param>
  5225. /// <returns>data object column table.</returns>
  5226. public virtual IDataReader GetDataReader(RaisingStudio.Data.Expressions.ConditionExpression conditionExpression)
  5227. {
  5228. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  5229. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  5230. return GetDataReader(conditionCommand, this.TransactionManager.DefaultTransaction);
  5231. }
  5232. /// <summary>
  5233. /// Gets data object column table.
  5234. /// </summary>
  5235. /// <param name="columnNames">An array of Columns.</param>
  5236. /// <param name="conditionCommand">Condition Command.</param>
  5237. /// <param name="transaction">Database transaction.</param>
  5238. /// <returns>data object column table.</returns>
  5239. protected virtual IDataReader GetDataReader(string[] columnNames, CommonCommand conditionCommand, System.Data.IDbTransaction transaction)
  5240. {
  5241. System.Data.Common.DataTableMapping dataTableMapping;
  5242. System.Data.IDbCommand command = this.CommandBuilder.GetSelectCommand(columnNames, conditionCommand, out dataTableMapping);
  5243. if (transaction != null)
  5244. {
  5245. command.Transaction = transaction;
  5246. }
  5247. WriteLog(command);
  5248. return RaisingStudio.Data.Common.Database.ExecuteReaderCommand(command);
  5249. }
  5250. /// <summary>
  5251. /// Gets data object column table.
  5252. /// </summary>
  5253. /// <param name="columnNames">An array of Columns.</param>
  5254. /// <param name="conditionExpression">Condition expression</param>
  5255. /// <returns>data object column table.</returns>
  5256. public virtual IDataReader GetDataReader(string[] columnNames, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression)
  5257. {
  5258. RaisingStudio.Data.Common.Builders.Expressions.ConditionExpressionCommandBuilder conditionExpressionCommandBuilder = CreateConditionExpressionCommandBuilder(conditionExpression);
  5259. CommonCommand conditionCommand = conditionExpressionCommandBuilder.GetExpressionCommand();
  5260. return GetDataReader(columnNames, conditionCommand, this.TransactionManager.DefaultTransaction);
  5261. }
  5262. /// <summary>
  5263. /// Gets data object column table.
  5264. /// </summary>
  5265. /// <param name="columnExpressions">An array of column expressions.</param>
  5266. /// <param name="conditionExpression">Condition expression</param>
  5267. /// <returns>data object column table.</returns>
  5268. public virtual IDataReader GetDataReader(ColumnExpression[] columnExpressions, RaisingStudio.Data.Expressions.ConditionExpression conditionExpression)
  5269. {
  5270. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  5271. return GetDataReader(columnNames, conditionExpression);
  5272. }
  5273. /// <summary>
  5274. /// Gets data object column table.
  5275. /// </summary>
  5276. /// <param name="columnExpressions">An array of column expressions.</param>
  5277. /// <returns>data object column table.</returns>
  5278. public virtual IDataReader GetDataReader(ColumnExpression[] columnExpressions)
  5279. {
  5280. string[] columnNames = ConditionExpressionCommandBuilder.GetColumnNamesFromColumnExpressions(columnExpressions);
  5281. return GetDataReader(columnNames);
  5282. }
  5283. }
  5284. }