PageRenderTime 56ms CodeModel.GetById 11ms RepoModel.GetById 1ms app.codeStats 0ms

/Plugins/GizmoBeach.Components/DataObjects/EntityFrameworkOrmFramework.cs

http://github.com/kahanu/CondorXE
C# | 778 lines | 713 code | 52 blank | 13 comment | 22 complexity | ccb0ede08e2a36eede42cb581ee6dd18 MD5 | raw file
  1. using System;
  2. using Condor.Core;
  3. using Condor.Core.Interfaces;
  4. using MyMeta;
  5. namespace GizmoBeach.Components.DataObjects
  6. {
  7. public class EntityFrameworkOrmFramework : RenderBase, IORMFramework
  8. {
  9. #region ctors
  10. protected IDataStore _dataStore;
  11. protected RequestContext _context;
  12. protected IDatabase _database;
  13. protected ProgressDialogWrapper _dialog;
  14. private readonly IAutoMapperFramework _autoMapperFramework;
  15. public EntityFrameworkOrmFramework(IDataStore dataStore, RequestContext context)
  16. : this(dataStore, context, null)
  17. {
  18. }
  19. public EntityFrameworkOrmFramework(IDataStore dataStore, RequestContext context, IAutoMapperFramework autoMapperFramework)
  20. : base(context.Zeus.Output)
  21. {
  22. if (dataStore == null)
  23. throw new ApplicationException("EntityFrameworkOrmFramework dataStore");
  24. this._autoMapperFramework = autoMapperFramework;
  25. this._dataStore = dataStore;
  26. this._context = context;
  27. this._database = context.Database;
  28. this._dialog = context.Dialog;
  29. }
  30. #endregion
  31. #region IORMFramework Members
  32. public string Name
  33. {
  34. get { return "Entity Framework"; }
  35. }
  36. public void Generate()
  37. {
  38. _dialog.InitDialog(4);
  39. _dialog.Display("Processing Entity Framework 4.0 Helper classes");
  40. _context.FileList.Add("");
  41. _context.FileList.Add("Generated Entity Framework 4.0 Helper Classes:");
  42. _dialog.Display("Processing Entity Framework 4.0 DataObjectFactory class.");
  43. RenderDataObjectFactory();
  44. _dialog.Display("Processing Entity Framework 4.0 DataObjects Extensions class.");
  45. RenderDataObjectsExtensions();
  46. _dialog.Display("Processing Entity Framework 4.0 DynamicLinq class.");
  47. RenderDynamicLinqClass();
  48. if (_autoMapperFramework == null)
  49. {
  50. _dialog.InitDialog();
  51. _context.FileList.Add("");
  52. _context.FileList.Add("Generated Entity Framework 4.0 Data Objects Mapper Classes:");
  53. foreach (string tableName in _script.Tables)
  54. {
  55. ITable table = _database.Tables[tableName];
  56. _dialog.Display("Processing Entity Framework 4.0 Data Objects Mapper classes for '" + table.Name + "'");
  57. RenderMapperClass(table);
  58. }
  59. }
  60. _dialog.InitDialog();
  61. _context.FileList.Add("");
  62. _context.FileList.Add("Generated Entity Framework 4.0 Data Objects Interfaces:");
  63. RenderGenericCRUDDaoInterface();
  64. foreach (string tableName in _script.Tables)
  65. {
  66. ITable table = _database.Tables[tableName];
  67. _dialog.Display("Processing Entity Framework 4.0 Data Objects Interfaces for '" + table.Name + "'");
  68. RenderDaoInterface(table);
  69. }
  70. _dialog.InitDialog();
  71. _context.FileList.Add("");
  72. _context.FileList.Add("Generated Entity Framework 4.0 Data Objects Base Classes: ");
  73. foreach (string tableName in _script.Tables)
  74. {
  75. ITable table = _database.Tables[tableName];
  76. _dialog.Display("Processing Entity Framework 4.0 Data Objects Base Classes for '" + table.Name + "'");
  77. RenderBaseClass(table);
  78. }
  79. _dialog.InitDialog();
  80. _context.FileList.Add("");
  81. _context.FileList.Add("Generated Entity Framework 4.0 Data Objects Concrete Classes: ");
  82. foreach (string tableName in _script.Tables)
  83. {
  84. ITable table = _database.Tables[tableName];
  85. _dialog.Display("Processing Entity Framework 4.0 Data Objects Concrete Classes for '" + table.Name + "'");
  86. RenderConcreteClass(table);
  87. }
  88. BuildAutoMapperFramework();
  89. }
  90. #endregion
  91. #region Private Methods
  92. private void RenderConcreteClass(ITable table)
  93. {
  94. _hdrUtil.WriteClassHeader(_output);
  95. _output.autoTabLn("using System;");
  96. _output.autoTabLn("using System.Collections.Generic;");
  97. _output.autoTabLn("using System.Linq;");
  98. _output.autoTabLn("using System.Text;");
  99. _output.autoTabLn("using System.Data.Linq;");
  100. _output.autoTabLn("");
  101. _output.autoTabLn("using " + _script.Settings.BusinessObjects.BusinessObjectsNamespace + ";");
  102. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Interfaces;");
  103. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + "." + _script.Settings.DataOptions.ORMFramework.Selected + ";");
  104. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + "." + _script.Settings.DataOptions.ORMFramework.Selected + ".EntityMapper;");
  105. _output.autoTabLn("");
  106. _output.autoTabLn("using System.Linq.Dynamic;");
  107. _output.autoTabLn("");
  108. _output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace + "." + _script.Settings.DataOptions.ORMFramework.Selected + "." + _script.Settings.DataOptions.DataStore.Selected);
  109. _output.autoTabLn("{");
  110. _output.tabLevel++;
  111. _output.autoTabLn("public class " + _script.Settings.DataOptions.DataStore.Selected + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + " : " + StringFormatter.CleanUpClassName(table.Name) + "Base" + _script.Settings.DataOptions.ClassSuffix.Name + ", I" + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name);
  112. _output.autoTabLn("{");
  113. _output.tabLevel--;
  114. _output.autoTabLn("");
  115. _dataStore.GetById(table);
  116. _dataStore.GetAllWithSortingAndPaging(table);
  117. _output.autoTabLn("");
  118. _output.autoTabLn("");
  119. _output.tabLevel++;
  120. _output.autoTabLn("}");
  121. _output.tabLevel--;
  122. _output.autoTabLn("}");
  123. _context.FileList.Add(" " + _script.Settings.DataOptions.DataStore.Selected + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ".cs");
  124. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\" + _script.Settings.DataOptions.ORMFramework.Selected + "\\" + _script.Settings.DataOptions.DataStore.Selected, _script.Settings.DataOptions.DataStore.Selected + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ".cs"), SaveActions.DontOverwrite);
  125. }
  126. private void RenderBaseClass(ITable table)
  127. {
  128. _hdrUtil.WriteClassHeader(_output);
  129. _output.autoTabLn("using System;");
  130. _output.autoTabLn("using System.Collections.Generic;");
  131. _output.autoTabLn("using System.Data;");
  132. _output.autoTabLn("using System.Linq;");
  133. _output.autoTabLn("");
  134. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Interfaces;");
  135. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + "." + _script.Settings.DataOptions.ORMFramework.Selected + ".EntityMapper;");
  136. _output.autoTabLn("");
  137. _output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace + "." + _script.Settings.DataOptions.ORMFramework.Selected + "." + _script.Settings.DataOptions.DataStore.Selected);
  138. _output.autoTabLn("{");
  139. _output.tabLevel++;
  140. _output.autoTabLn("public class " + StringFormatter.CleanUpClassName(table.Name) + "Base" + _script.Settings.DataOptions.ClassSuffix.Name + " : ICRUD" + _script.Settings.DataOptions.ClassSuffix.Name + "<" + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + ">");
  141. _output.autoTabLn("{");
  142. _output.tabLevel++;
  143. _output.autoTabLn("#region CRUD Methods");
  144. _output.autoTabLn("");
  145. _output.tabLevel--;
  146. _output.autoTabLn("");
  147. _dataStore.GetAll(table);
  148. _dataStore.Insert(table);
  149. _dataStore.Update(table);
  150. _dataStore.Delete(table);
  151. _output.autoTabLn("");
  152. _output.tabLevel++;
  153. _output.autoTabLn("#endregion");
  154. _output.tabLevel--;
  155. _output.autoTabLn("}");
  156. _output.tabLevel--;
  157. _output.autoTabLn("}");
  158. _context.FileList.Add(" " + StringFormatter.CleanUpClassName(table.Name) + "Base" + _script.Settings.DataOptions.ClassSuffix.Name + ".cs");
  159. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\" + _script.Settings.DataOptions.ORMFramework.Selected + "\\" + _script.Settings.DataOptions.DataStore.Selected + "\\Generated", StringFormatter.CleanUpClassName(table.Name) + "Base" + _script.Settings.DataOptions.ClassSuffix.Name + ".cs"), SaveActions.Overwrite);
  160. }
  161. private void RenderDaoInterface(ITable table)
  162. {
  163. _hdrUtil.WriteClassHeader(_output);
  164. _output.autoTabLn("using System;");
  165. _output.autoTabLn("using System.Linq;");
  166. _output.autoTabLn("using System.Collections.Generic;");
  167. _output.autoTabLn("");
  168. _output.autoTabLn("using " + _script.Settings.BusinessObjects.BusinessObjectsNamespace + ";");
  169. _output.autoTabLn("");
  170. _output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace + ".Interfaces");
  171. _output.autoTabLn("{");
  172. _output.tabLevel++;
  173. _output.autoTabLn("public interface I" + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + " : ICRUD" + _script.Settings.DataOptions.ClassSuffix.Name + "<" + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + ">");
  174. _output.autoTabLn("{");
  175. _output.tabLevel++;
  176. _output.autoTabLn("" + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " GetById(" + _context.Utility.RenderConcreteMethodParameters(table) + ");");
  177. _output.autoTabLn("List<" + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + "> GetAll(string sortExpression, int startRowIndex, int maximumRows);");
  178. _output.tabLevel--;
  179. _output.autoTabLn("}");
  180. _output.tabLevel--;
  181. _output.autoTabLn("}");
  182. _context.FileList.Add(" " + "I" + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ".cs");
  183. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\Interfaces", "I" + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ".cs"), SaveActions.DontOverwrite);
  184. }
  185. private void RenderGenericCRUDDaoInterface()
  186. {
  187. _hdrUtil.WriteClassHeader(_output);
  188. _output.autoTabLn("using System;");
  189. _output.autoTabLn("using System.Linq;");
  190. _output.autoTabLn("using System.Collections.Generic;");
  191. _output.autoTabLn("");
  192. _output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace + ".Interfaces");
  193. _output.autoTabLn("{");
  194. _output.tabLevel++;
  195. _output.autoTabLn("public interface ICRUD" + _script.Settings.DataOptions.ClassSuffix.Name + "<T>");
  196. _output.autoTabLn("{");
  197. _output.tabLevel++;
  198. _output.autoTabLn("#region CRUD Methods");
  199. _output.autoTabLn("");
  200. _output.autoTabLn("List<T> GetAll();");
  201. _output.autoTabLn("void Insert(T model);");
  202. _output.autoTabLn("void Delete(T model);");
  203. _output.autoTabLn("void Update(T model);");
  204. _output.autoTabLn("");
  205. _output.autoTabLn("#endregion");
  206. _output.tabLevel--;
  207. _output.autoTabLn("");
  208. _output.autoTabLn("}");
  209. _output.tabLevel--;
  210. _output.autoTabLn("}");
  211. _context.FileList.Add(" ICRUD" + _script.Settings.DataOptions.ClassSuffix.Name + ".cs");
  212. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\Interfaces", "ICRUD" + _script.Settings.DataOptions.ClassSuffix.Name + ".cs"), SaveActions.Overwrite);
  213. }
  214. private void RenderMapperClass(ITable table)
  215. {
  216. _hdrUtil.WriteClassHeader(_output);
  217. _output.autoTabLn("using System;");
  218. _output.autoTabLn("using System.Collections.Generic;");
  219. _output.autoTabLn("using System.Data.Objects.DataClasses;");
  220. _output.autoTabLn("using System.Linq;");
  221. _output.autoTabLn("");
  222. _output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace + "." + _script.Settings.DataOptions.ORMFramework.Selected + ".EntityMapper");
  223. _output.autoTabLn("{");
  224. _output.tabLevel++;
  225. _output.autoTabLn("public static class " + StringFormatter.CleanUpClassName(table.Name) + "Mapper");
  226. _output.autoTabLn("{");
  227. _output.tabLevel++;
  228. _output.autoTabLn("public static " + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " ToBusinessObject(this " + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " entity)");
  229. _output.autoTabLn("{");
  230. _output.tabLevel++;
  231. _output.autoTabLn("if (entity == null) return null;");
  232. _output.autoTabLn("");
  233. _output.autoTabLn("var model = new " + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + "();");
  234. _output.autoTabLn("");
  235. string line = string.Empty;
  236. // ToBusinessObject Loop
  237. foreach (Column c in table.Columns)
  238. {
  239. //if (c.IsInPrimaryKey)
  240. //{
  241. // _output.autoTabLn("model." + _context.Utility.CleanUpProperty(c.Name) + " = " + "entity." + _context.Utility.CleanUpProperty(c.Name) + ";");
  242. //}
  243. //else
  244. if (c.Name.ToLower() == _context.ScriptSettings.Settings.DataOptions.VersionColumnName)
  245. {
  246. _output.autoTabLn("model." + _context.ScriptSettings.Settings.DataOptions.VersionColumnName + " = entity." + _context.Utility.CleanUpProperty(c.Name, false, PropertyModifications.Underscore) + ".AsBase64String();");
  247. }
  248. else
  249. {
  250. line = "model." + _context.Utility.CleanUpProperty(c.Name) + " = " + "entity." + _context.Utility.CleanUpProperty(c.Name, false, PropertyModifications.Underscore);
  251. if (c.LanguageType.ToLower() != "string")
  252. {
  253. if (c.IsNullable)
  254. {
  255. line += ".HasValue ? (" + c.LanguageType + ")entity." + _context.Utility.CleanUpProperty(c.Name, false, PropertyModifications.Underscore) + " : default(" + c.LanguageType + ")";
  256. }
  257. }
  258. _output.autoTabLn(line + ";");
  259. }
  260. }
  261. // Now include any foreign key relationships
  262. foreach (IForeignKey key in table.ForeignKeys)
  263. {
  264. if (_script.Tables.Contains(key.PrimaryTable.Name))
  265. {
  266. if (key.PrimaryTable.Name != table.Name)
  267. _output.autoTabLn("model." + StringFormatter.CleanUpClassName(key.PrimaryTable.Name) + " = " + StringFormatter.CleanUpClassName(key.PrimaryTable.Name) + "Mapper.ToBusinessObject(entity." + StringFormatter.CleanUpClassName(key.PrimaryTable.Name) + ");");
  268. }
  269. }
  270. _output.autoTabLn("");
  271. _output.autoTabLn("return model;");
  272. _output.tabLevel--;
  273. _output.autoTabLn("}");
  274. _output.autoTabLn("");
  275. _output.autoTabLn("public static " + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " ToEntity(this " + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " model)");
  276. _output.autoTabLn("{");
  277. _output.tabLevel++;
  278. _output.autoTabLn("if (model == null) return null;");
  279. _output.autoTabLn("");
  280. _output.autoTabLn("var entity = new " + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + "();");
  281. _output.autoTabLn("");
  282. // ToEntity Loop
  283. foreach (Column c in table.Columns)
  284. {
  285. if (c.Name.ToLower() == _context.ScriptSettings.Settings.DataOptions.VersionColumnName.ToLower())
  286. {
  287. _output.autoTabLn("entity." + _context.Utility.CleanUpProperty(c.Name, false, PropertyModifications.Underscore) + " = model." + _context.Utility.CleanUpProperty(c.Name) + ".AsByteArray();");
  288. }
  289. else
  290. {
  291. if (c.LanguageType.ToLower() == "datetime")
  292. {
  293. if (c.IsNullable)
  294. {
  295. // This handles the datetime2 to datetime conversion exceptions with SQL Server.
  296. // This occurs when a nullable datetime has a date of 1/1/0001.
  297. _output.autoTabLn("entity." + _context.Utility.CleanUpProperty(c.Name, false, PropertyModifications.Underscore) + " = (model." + _context.Utility.CleanUpProperty(c.Name) + " == default(DateTime)) ? null : model." + _context.Utility.CleanUpProperty(c.Name) + ";");
  298. }
  299. else
  300. {
  301. _output.autoTabLn("entity." + _context.Utility.CleanUpProperty(c.Name, false, PropertyModifications.Underscore) + " = model." + _context.Utility.CleanUpProperty(c.Name) + ";");
  302. }
  303. }
  304. else
  305. {
  306. _output.autoTabLn("entity." + _context.Utility.CleanUpProperty(c.Name, false, PropertyModifications.Underscore) + " = model." + _context.Utility.CleanUpProperty(c.Name) + ";");
  307. }
  308. }
  309. }
  310. _output.autoTabLn("");
  311. _output.autoTabLn("return entity;");
  312. _output.tabLevel--;
  313. _output.autoTabLn("}");
  314. _output.autoTabLn("");
  315. _output.autoTabLn("public static " + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " ToEntity(this " + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " model, " + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + " entity)");
  316. _output.autoTabLn("{");
  317. _output.tabLevel++;
  318. _output.autoTabLn("if (model == null) return null;");
  319. _output.autoTabLn("");
  320. _output.autoTabLn("");
  321. // ToEntity Loop
  322. foreach (Column c in table.Columns)
  323. {
  324. if (c.Name.ToLower() == _context.ScriptSettings.Settings.DataOptions.VersionColumnName.ToLower())
  325. {
  326. _output.autoTabLn("entity." + _context.Utility.CleanUpProperty(c.Name, false, PropertyModifications.Underscore) + " = model." + _context.Utility.CleanUpProperty(c.Name) + ".AsByteArray();");
  327. }
  328. else
  329. {
  330. if (c.LanguageType.ToLower() == "datetime")
  331. {
  332. if (c.IsNullable)
  333. {
  334. // This handles the datetime2 to datetime conversion exceptions with SQL Server.
  335. // This occurs when a nullable datetime has a date of 1/1/0001.
  336. _output.autoTabLn("entity." + _context.Utility.CleanUpProperty(c.Name, false, PropertyModifications.Underscore) + " = (model." + _context.Utility.CleanUpProperty(c.Name) + " == default(DateTime)) ? null : model." + _context.Utility.CleanUpProperty(c.Name) + ";");
  337. }
  338. else
  339. {
  340. _output.autoTabLn("entity." + _context.Utility.CleanUpProperty(c.Name, false, PropertyModifications.Underscore) + " = model." + _context.Utility.CleanUpProperty(c.Name) + ";");
  341. }
  342. }
  343. else
  344. {
  345. _output.autoTabLn("entity." + _context.Utility.CleanUpProperty(c.Name, false, PropertyModifications.Underscore) + " = " + "model." + _context.Utility.CleanUpProperty(c.Name) + ";");
  346. }
  347. }
  348. }
  349. _output.autoTabLn("");
  350. _output.autoTabLn("return entity;");
  351. _output.tabLevel--;
  352. _output.autoTabLn("}");
  353. _output.autoTabLn("");
  354. _output.autoTabLn("public static List<" + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + "> ToBusinessObjects(this EntityCollection<" + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + "> entities)");
  355. _output.autoTabLn("{");
  356. _output.tabLevel++;
  357. _output.autoTabLn("if (entities == null) return null;");
  358. _output.autoTabLn("return entities.Select(o => o.ToBusinessObject()).ToList();");
  359. _output.tabLevel--;
  360. _output.autoTabLn("}");
  361. _output.autoTabLn("");
  362. _output.autoTabLn("public static List<" + _context.Utility.BuildModelClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + "> ToBusinessObjects(this IEnumerable<" + _context.Utility.BuildEntityClassWithNameSpace(StringFormatter.CleanUpClassName(table.Name)) + "> entities)");
  363. _output.autoTabLn("{");
  364. _output.tabLevel++;
  365. _output.autoTabLn("if (entities == null) return null;");
  366. _output.autoTabLn("return entities.Select(o => o.ToBusinessObject()).ToList();");
  367. _output.tabLevel--;
  368. _output.autoTabLn("}");
  369. _output.tabLevel--;
  370. _output.autoTabLn("}");
  371. _output.tabLevel--;
  372. _output.autoTabLn("}");
  373. _context.FileList.Add(" " + StringFormatter.CleanUpClassName(table.Name) + "Mapper.cs");
  374. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\" + _script.Settings.DataOptions.ORMFramework.Selected + "\\EntityMapper", StringFormatter.CleanUpClassName(table.Name) + "Mapper.cs"), SaveActions.DontOverwrite);
  375. }
  376. private void RenderDynamicLinqClass()
  377. {
  378. }
  379. private void RenderDataObjectsExtensions()
  380. {
  381. _hdrUtil.WriteClassHeader(_output);
  382. _output.autoTabLn("using System;");
  383. _output.autoTabLn("using System.Collections.Generic;");
  384. _output.autoTabLn("using System.Linq;");
  385. _output.autoTabLn("using System.Data.Linq;");
  386. _output.autoTabLn("");
  387. _output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace);
  388. _output.autoTabLn("{");
  389. _output.tabLevel++;
  390. _output.autoTabLn("/// <summary>");
  391. _output.autoTabLn("/// Useful set of Extension methods for Data Access purposes.");
  392. _output.autoTabLn("/// </summary>");
  393. _output.autoTabLn("public static class Extensions");
  394. _output.autoTabLn("{");
  395. _output.tabLevel++;
  396. _output.autoTabLn("/// <summary>");
  397. _output.autoTabLn("/// Transform object into Identity data type (integer).");
  398. _output.autoTabLn("/// </summary>");
  399. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  400. _output.autoTabLn("/// <param name=\"defaultId\">Optional default value is -1.</param>");
  401. _output.autoTabLn("/// <returns>Identity value.</returns>");
  402. _output.autoTabLn("public static int AsId(this object item, int defaultId = -1)");
  403. _output.autoTabLn("{");
  404. _output.tabLevel++;
  405. _output.autoTabLn("if (item == null)");
  406. _output.tabLevel++;
  407. _output.autoTabLn("return defaultId;");
  408. _output.tabLevel--;
  409. _output.autoTabLn("");
  410. _output.autoTabLn("int result;");
  411. _output.autoTabLn("if (!int.TryParse(item.ToString(), out result))");
  412. _output.tabLevel++;
  413. _output.autoTabLn("return defaultId;");
  414. _output.tabLevel--;
  415. _output.autoTabLn("");
  416. _output.autoTabLn("return result;");
  417. _output.tabLevel--;
  418. _output.autoTabLn("}");
  419. _output.autoTabLn("");
  420. _output.autoTabLn("/// <summary>");
  421. _output.autoTabLn("/// Transform object into integer data type.");
  422. _output.autoTabLn("/// </summary>");
  423. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  424. _output.autoTabLn("/// <param name=\"defaultId\">Optional default value is default(int).</param>");
  425. _output.autoTabLn("/// <returns>The integer value.</returns>");
  426. _output.autoTabLn("public static int AsInt(this object item, int defaultInt = default(int))");
  427. _output.autoTabLn("{");
  428. _output.tabLevel++;
  429. _output.autoTabLn("if (item == null)");
  430. _output.tabLevel++;
  431. _output.autoTabLn("return defaultInt;");
  432. _output.tabLevel--;
  433. _output.autoTabLn("");
  434. _output.autoTabLn("int result;");
  435. _output.autoTabLn("if (!int.TryParse(item.ToString(), out result))");
  436. _output.tabLevel++;
  437. _output.autoTabLn("return defaultInt;");
  438. _output.tabLevel--;
  439. _output.autoTabLn("");
  440. _output.autoTabLn("return result;");
  441. _output.tabLevel--;
  442. _output.autoTabLn("}");
  443. _output.autoTabLn("");
  444. _output.autoTabLn("/// <summary>");
  445. _output.autoTabLn("/// Transform object into double data type.");
  446. _output.autoTabLn("/// </summary>");
  447. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  448. _output.autoTabLn("/// <param name=\"defaultId\">Optional default value is default(double).</param>");
  449. _output.autoTabLn("/// <returns>The double value.</returns>");
  450. _output.autoTabLn("public static double AsDouble(this object item, double defaultDouble = default(double))");
  451. _output.autoTabLn("{");
  452. _output.tabLevel++;
  453. _output.autoTabLn("if (item == null)");
  454. _output.tabLevel++;
  455. _output.autoTabLn("return defaultDouble;");
  456. _output.tabLevel--;
  457. _output.autoTabLn("");
  458. _output.autoTabLn("double result;");
  459. _output.autoTabLn("if (!double.TryParse(item.ToString(), out result))");
  460. _output.tabLevel++;
  461. _output.autoTabLn("return defaultDouble;");
  462. _output.tabLevel--;
  463. _output.autoTabLn("");
  464. _output.autoTabLn("return result;");
  465. _output.tabLevel--;
  466. _output.autoTabLn("}");
  467. _output.autoTabLn("");
  468. _output.autoTabLn("/// <summary>");
  469. _output.autoTabLn("/// Transform object into string data type.");
  470. _output.autoTabLn("/// </summary>");
  471. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  472. _output.autoTabLn("/// <param name=\"defaultId\">Optional default value is default(string).</param>");
  473. _output.autoTabLn("/// <returns>The string value.</returns>");
  474. _output.autoTabLn("public static string AsString(this object item, string defaultString = default(string))");
  475. _output.autoTabLn("{");
  476. _output.tabLevel++;
  477. _output.autoTabLn("if (item == null || item.Equals(System.DBNull.Value))");
  478. _output.tabLevel++;
  479. _output.autoTabLn("return defaultString;");
  480. _output.tabLevel--;
  481. _output.autoTabLn("");
  482. _output.autoTabLn("return item.ToString().Trim();");
  483. _output.tabLevel--;
  484. _output.autoTabLn("}");
  485. _output.autoTabLn("");
  486. _output.autoTabLn("/// <summary>");
  487. _output.autoTabLn("/// Transform object into DateTime data type.");
  488. _output.autoTabLn("/// </summary>");
  489. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  490. _output.autoTabLn("/// <param name=\"defaultId\">Optional default value is default(DateTime).</param>");
  491. _output.autoTabLn("/// <returns>The DateTime value.</returns>");
  492. _output.autoTabLn("public static DateTime AsDateTime(this object item, DateTime defaultDateTime = default(DateTime))");
  493. _output.autoTabLn("{");
  494. _output.tabLevel++;
  495. _output.autoTabLn("if (item == null || string.IsNullOrEmpty(item.ToString()))");
  496. _output.tabLevel++;
  497. _output.autoTabLn("return defaultDateTime;");
  498. _output.tabLevel--;
  499. _output.autoTabLn("");
  500. _output.autoTabLn("DateTime result;");
  501. _output.autoTabLn("if (!DateTime.TryParse(item.ToString(), out result))");
  502. _output.tabLevel++;
  503. _output.autoTabLn("return defaultDateTime;");
  504. _output.tabLevel--;
  505. _output.autoTabLn("");
  506. _output.autoTabLn("return result;");
  507. _output.tabLevel--;
  508. _output.autoTabLn("}");
  509. _output.autoTabLn("");
  510. _output.autoTabLn("/// <summary>");
  511. _output.autoTabLn("/// Transform object into bool data type.");
  512. _output.autoTabLn("/// </summary>");
  513. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  514. _output.autoTabLn("/// <param name=\"defaultId\">Optional default value is default(bool).</param>");
  515. _output.autoTabLn("/// <returns>The bool value.</returns>");
  516. _output.autoTabLn("public static bool AsBool(this object item, bool defaultBool = default(bool))");
  517. _output.autoTabLn("{");
  518. _output.tabLevel++;
  519. _output.autoTabLn("if (item == null)");
  520. _output.tabLevel++;
  521. _output.autoTabLn("return defaultBool;");
  522. _output.tabLevel--;
  523. _output.autoTabLn("");
  524. _output.autoTabLn("return new List<string>() { \"yes\", \"y\", \"true\" }.Contains(item.ToString().ToLower());");
  525. _output.tabLevel--;
  526. _output.autoTabLn("}");
  527. _output.autoTabLn("");
  528. _output.autoTabLn("/// <summary>");
  529. _output.autoTabLn("/// Transform string into byte array.");
  530. _output.autoTabLn("/// </summary>");
  531. _output.autoTabLn("/// <param name=\"s\">The object to be transformed.</param>");
  532. _output.autoTabLn("/// <returns>The transformed byte array.</returns>");
  533. _output.autoTabLn("public static byte[] AsByteArray(this string s)");
  534. _output.autoTabLn("{");
  535. _output.tabLevel++;
  536. _output.autoTabLn("if (string.IsNullOrEmpty(s))");
  537. _output.tabLevel++;
  538. _output.autoTabLn("return null;");
  539. _output.tabLevel--;
  540. _output.autoTabLn("");
  541. _output.autoTabLn("return Convert.FromBase64String(s);");
  542. _output.tabLevel--;
  543. _output.autoTabLn("}");
  544. _output.autoTabLn("");
  545. _output.autoTabLn("/// <summary>");
  546. _output.autoTabLn("/// Transform object into base64 string.");
  547. _output.autoTabLn("/// </summary>");
  548. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  549. _output.autoTabLn("/// <returns>The base64 string value.</returns>");
  550. _output.autoTabLn("public static string AsBase64String(this object item)");
  551. _output.autoTabLn("{");
  552. _output.tabLevel++;
  553. _output.autoTabLn("if (item == null)");
  554. _output.tabLevel++;
  555. _output.autoTabLn("return null;");
  556. _output.tabLevel--;
  557. _output.autoTabLn("");
  558. _output.autoTabLn("return Convert.ToBase64String((byte[]) item); ");
  559. _output.tabLevel--;
  560. _output.autoTabLn("}");
  561. _output.autoTabLn("");
  562. _output.autoTabLn("/// <summary>");
  563. _output.autoTabLn("/// Transform Binary into base64 string data type. ");
  564. _output.autoTabLn("/// Note: This is used in LINQ to SQL only.");
  565. _output.autoTabLn("/// </summary>");
  566. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  567. _output.autoTabLn("/// <returns>The base64 string value.</returns>");
  568. _output.autoTabLn("public static string AsBase64String(this Binary item)");
  569. _output.autoTabLn("{");
  570. _output.tabLevel++;
  571. _output.autoTabLn("if (item == null)");
  572. _output.tabLevel++;
  573. _output.autoTabLn("return null;");
  574. _output.tabLevel--;
  575. _output.autoTabLn("");
  576. _output.autoTabLn("return Convert.ToBase64String(item.ToArray());");
  577. _output.tabLevel--;
  578. _output.autoTabLn("}");
  579. _output.autoTabLn("");
  580. _output.autoTabLn("/// <summary>");
  581. _output.autoTabLn("/// Transform base64 string to Binary data type. ");
  582. _output.autoTabLn("/// Note: This is used in LINQ to SQL only.");
  583. _output.autoTabLn("/// </summary>");
  584. _output.autoTabLn("/// <param name=\"s\">The base 64 string to be transformed.</param>");
  585. _output.autoTabLn("/// <returns>The Binary value.</returns>");
  586. _output.autoTabLn("public static Binary AsBinary(this string s)");
  587. _output.autoTabLn("{");
  588. _output.tabLevel++;
  589. _output.autoTabLn("if (string.IsNullOrEmpty(s))");
  590. _output.tabLevel++;
  591. _output.autoTabLn("return null;");
  592. _output.tabLevel--;
  593. _output.autoTabLn("");
  594. _output.autoTabLn("return new Binary(Convert.FromBase64String(s));");
  595. _output.tabLevel--;
  596. _output.autoTabLn("}");
  597. _output.autoTabLn("");
  598. _output.autoTabLn("/// <summary>");
  599. _output.autoTabLn("/// Transform object into Guid data type.");
  600. _output.autoTabLn("/// </summary>");
  601. _output.autoTabLn("/// <param name=\"item\">The object to be transformed.</param>");
  602. _output.autoTabLn("/// <returns>The Guid value.</returns>");
  603. _output.autoTabLn("public static Guid AsGuid(this object item)");
  604. _output.autoTabLn("{");
  605. _output.tabLevel++;
  606. _output.autoTabLn("try { return new Guid(item.ToString()); }");
  607. _output.autoTabLn("catch { return Guid.Empty; }");
  608. _output.tabLevel--;
  609. _output.autoTabLn("}");
  610. _output.autoTabLn("");
  611. _output.autoTabLn("/// <summary>");
  612. _output.autoTabLn("/// Concatenates SQL and ORDER BY clauses into a single string. ");
  613. _output.autoTabLn("/// </summary>");
  614. _output.autoTabLn("/// <param name=\"sql\">The SQL string</param>");
  615. _output.autoTabLn("/// <param name=\"sortExpression\">The Sort Expression.</param>");
  616. _output.autoTabLn("/// <returns>Contatenated SQL Statement.</returns>");
  617. _output.autoTabLn("public static string OrderBy(this string sql, string sortExpression)");
  618. _output.autoTabLn("{");
  619. _output.tabLevel++;
  620. _output.autoTabLn("if (string.IsNullOrEmpty(sortExpression))");
  621. _output.tabLevel++;
  622. _output.autoTabLn("return sql;");
  623. _output.tabLevel--;
  624. _output.autoTabLn("");
  625. _output.autoTabLn("return sql + \" ORDER BY \" + sortExpression;");
  626. _output.tabLevel--;
  627. _output.autoTabLn("}");
  628. _output.autoTabLn("");
  629. _output.autoTabLn("/// <summary>");
  630. _output.autoTabLn("/// Takes an enumerable source and returns a comma separate string.");
  631. _output.autoTabLn("/// Handy to build SQL Statements (for example with IN () statements) from object collections.");
  632. _output.autoTabLn("/// </summary>");
  633. _output.autoTabLn("/// <typeparam name=\"T\">The Enumerable type</typeparam>");
  634. _output.autoTabLn("/// <typeparam name=\"U\">The original data type (typically identities - int).</typeparam>");
  635. _output.autoTabLn("/// <param name=\"source\">The enumerable input collection.</param>");
  636. _output.autoTabLn("/// <param name=\"func\">The function that extracts property value in object.</param>");
  637. _output.autoTabLn("/// <returns>The comma separated string.</returns>");
  638. _output.autoTabLn("public static string CommaSeparate<T, U>(this IEnumerable<T> source, Func<T, U> func)");
  639. _output.autoTabLn("{");
  640. _output.tabLevel++;
  641. _output.autoTabLn("return string.Join(\",\", source.Select(s => func(s).ToString()).ToArray());");
  642. _output.tabLevel--;
  643. _output.autoTabLn("}");
  644. _output.tabLevel--;
  645. _output.autoTabLn("}");
  646. _output.tabLevel--;
  647. _output.autoTabLn("}");
  648. _output.autoTabLn("");
  649. _context.FileList.Add(" Extensions.cs");
  650. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\Shared", "Extensions.cs"), SaveActions.Overwrite);
  651. }
  652. private void RenderDataObjectFactory()
  653. {
  654. _hdrUtil.WriteClassHeader(_output);
  655. _output.autoTabLn("using System.Configuration;");
  656. _output.autoTabLn("");
  657. _output.autoTabLn("namespace " + _script.Settings.DataOptions.DataObjectsNamespace + "." + _script.Settings.DataOptions.ORMFramework.Selected);
  658. _output.autoTabLn("{");
  659. _output.tabLevel++;
  660. _output.autoTabLn("/// <summary>");
  661. _output.autoTabLn("/// DataObjectFactory caches the connectionstring so that the context can be created quickly.");
  662. _output.autoTabLn("/// </summary>");
  663. _output.autoTabLn("public static class DataObjectFactory");
  664. _output.autoTabLn("{");
  665. _output.tabLevel++;
  666. _output.autoTabLn("private static readonly string _connectionString;");
  667. _output.autoTabLn("");
  668. _output.autoTabLn("/// <summary>");
  669. _output.autoTabLn("/// Static constructor. Reads the connectionstring from web.config just once.");
  670. _output.autoTabLn("/// </summary>");
  671. _output.autoTabLn("static DataObjectFactory()");
  672. _output.autoTabLn("{");
  673. _output.tabLevel++;
  674. _output.autoTabLn("string connectionStringName = ConfigurationManager.AppSettings.Get(\"ConnectionStringName\");");
  675. _output.autoTabLn("_connectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;");
  676. _output.tabLevel--;
  677. _output.autoTabLn("}");
  678. _output.autoTabLn("");
  679. _output.autoTabLn("/// <summary>");
  680. _output.autoTabLn("/// Creates the Context using the current connectionstring.");
  681. _output.autoTabLn("/// </summary>");
  682. _output.autoTabLn("/// <remarks>");
  683. _output.autoTabLn("/// Gof pattern: Factory method. ");
  684. _output.autoTabLn("/// </remarks>");
  685. _output.autoTabLn("/// <returns>Action Entities context.</returns>");
  686. _output.autoTabLn("public static " + _script.Settings.DataOptions.DataContext.Name + " CreateContext()");
  687. _output.autoTabLn("{");
  688. _output.tabLevel++;
  689. _output.autoTabLn("return new " + _script.Settings.DataOptions.DataContext.Name + "(_connectionString);");
  690. _output.tabLevel--;
  691. _output.autoTabLn("}");
  692. _output.tabLevel--;
  693. _output.autoTabLn("}");
  694. _output.tabLevel--;
  695. _output.autoTabLn("}");
  696. _context.FileList.Add(" DataObjectFactory.cs");
  697. SaveOutput(CreateFullPath(_script.Settings.DataOptions.DataObjectsNamespace + "\\" + _script.Settings.DataOptions.ORMFramework.Selected, "DataObjectFactory.cs"), SaveActions.Overwrite);
  698. }
  699. private void BuildAutoMapperFramework()
  700. {
  701. if (_autoMapperFramework != null)
  702. {
  703. bool useWebService = false;
  704. _autoMapperFramework.RenderAutoMapperExtensionClass(useWebService);
  705. _autoMapperFramework.RenderAutoMapperConfiguration(useWebService);
  706. _autoMapperFramework.RenderAutoMapperAppStart();
  707. foreach (string tableName in _script.Tables)
  708. {
  709. ITable table = _database.Tables[tableName];
  710. _autoMapperFramework.BuildModelClass(table, useWebService);
  711. }
  712. }
  713. }
  714. #endregion
  715. }
  716. }