public void GenerateCommands() { // this call is needed to initialize the assembly var context = new BeSmartSportsEntities(); var theAssembly = AppDomain.CurrentDomain.GetAssemblies() .Where(a => a.GetName().ToString().StartsWith(string.Format("{0}, Version", DataAccessAssemblyName))) .First(); var theTypes = theAssembly.GetTypes() .Where(t => t.Namespace == EntityNamespace) .ToList(); foreach (var theType in theTypes) { var nameOfEntity = theType.Name; //USER if (nameOfEntity.ToLower() == "dbversion" || nameOfEntity.ToLower() == "sysdiagram") { continue; } if (nameOfEntity.ToLower() == DataModelToExclude.ToLower()) { continue; } if (nameOfEntity.ToLower().EndsWith("_result")) //SPs { continue; } var pluralEntityName = nameOfEntity.Pluralize(); //USERs var pascalNameOfClass = Util.ToPascalCase(nameOfEntity); //User var lowerSingleEntityName = pascalNameOfClass.ToLower(); //user var lowerPluralEntityName = pluralEntityName.ToLower().Replace("_", "-"); //users Console.WriteLine(string.Format(@"http://*****:*****@"http://localhost:63820/api/v1/{0}/1", lowerPluralEntityName)); Console.WriteLine(""); } }
public void GenerateWebApiControllers() { // this call is needed to initialize the assembly var context = new BeSmartSportsEntities(); var theAssembly = AppDomain.CurrentDomain.GetAssemblies() .Where(a => a.GetName().ToString().StartsWith(string.Format("{0}, Version", DataAccessAssemblyName))) .First(); var theTypes = theAssembly.GetTypes() .Where(t => t.Namespace == EntityNamespace) .ToList(); foreach (var theType in theTypes) { var nameOfEntity = theType.Name; //USER if (nameOfEntity.ToLower() == "dbversion" || nameOfEntity.ToLower() == "sysdiagram") { continue; } if (nameOfEntity.ToLower() == DataModelToExclude.ToLower()) { continue; } if (nameOfEntity.ToLower().EndsWith("_result")) //SPs { continue; } var pluralEntityName = nameOfEntity.Pluralize(); //USERs var pascalNameOfClass = Util.ToPascalCase(nameOfEntity); //User var lowerSingleEntityName = pascalNameOfClass.ToLower(); //user var lowerPluralEntityName = pluralEntityName.ToLower().Replace("_", "-"); //users //FK Functions handling string fkMethods = ""; List <string> collectionsHandled = new List <string>(); foreach (var property in theType.GetProperties()) { string typeName = Util.GetTypeDisplayName(property.PropertyType); if (typeName.StartsWith("ICollection")) { if (collectionsHandled.Contains(typeName)) { continue; } else { collectionsHandled.Add(typeName); } var fkTableName = typeName.Replace("ICollection<", "").Replace(">", ""); //USER var pluralFk = fkTableName.Pluralize(); //USERs var pascalFkClass = Util.ToPascalCase(fkTableName); //User var lowerSingleFkName = pascalFkClass.ToLower(); //user var lowerPluralFkName = pluralFk.ToLower().Replace("_", "-"); //users string fkColumnName = null; var objectContext = ((IObjectContextAdapter)context).ObjectContext; var storageMetadata = ((EntityConnection)objectContext.Connection).GetMetadataWorkspace().GetItems(DataSpace.SSpace); var entityProps = (from s in storageMetadata where s.BuiltInTypeKind == BuiltInTypeKind.EntityType select s as EntityType); var personRightStorageMetadata = (from m in entityProps where m.Name == fkTableName select m).Single(); foreach (var item in personRightStorageMetadata.Properties) { Console.WriteLine(item.Name); var fkeys = ((EntityConnection)objectContext.Connection).GetMetadataWorkspace().GetItems <AssociationType>(DataSpace.CSpace).Where(a => a.IsForeignKey); //check if the table has any foreign constraints for that column var fknames = fkeys.Where(x => x.ReferentialConstraints[0].ToRole.Name == fkTableName).Where(x => x.ReferentialConstraints[0].ToProperties[0].Name == item.Name); //Get the corresponding reference entity column name foreach (var fkname in fknames) { var refConstraint = fkname.ReferentialConstraints[0]; if (refConstraint.FromRole.Name == nameOfEntity) { fkColumnName = refConstraint.ToProperties[0].Name; fkMethods += string.Format( " \r\n" + "[HttpGet] \r\n" + "[Route(\"api/v1/{0}/{{id}}/{1}/filter/{9}\")] \r\n" + "public IHttpActionResult Get{4}By{2}_Filter_{6} (int id) \r\n" + "{{ \r\n" + " var list = _repository.GetXByFK<{8}.{3}, {5}>(\"{3}\", \"{7}\", id.ToString()); \r\n" + " #if DEBUG \r\n" + " list.ToList().ForEach(x => x.SetLinks()); \r\n" + " #endif \r\n" + " return Json(list); \r\n" + "}} " , lowerPluralEntityName, lowerPluralFkName, pascalNameOfClass, fkTableName, pascalFkClass, pascalFkClass, fkColumnName.ToLower(), fkColumnName, DataAccessAssemblyName, fkColumnName.ToLower().Replace("_", "-")); } } } } } //FK Functions handling var csFile = ControllersFolder + pascalNameOfClass + "Controller.cs"; using (StreamWriter sw = new StreamWriter(csFile)) { sw.Write(string.Format( "using System.Net; \r\n" + "using System.Web.Http; \r\n" + "using System.Web.Http.Cors; \r\n" + "using BSS_WebAPI.Auth; \r\n" + "using BSS_WebAPI.Models.DTO; \r\n" + "using System.Linq; \r\n" + " \r\n" + "namespace BSS_WebAPI.Controllers.Auto \r\n" + "{{ \r\n" + " [EnableCors(\"*\", \"*\", \"*\")] \r\n" + " //[CustomAuthorize] \r\n" + " public partial class {0}Controller : ApiController \r\n" + " {{ \r\n" + " private IDataAccessRepository<{0}, int> _repository; \r\n" + " public {0}Controller(IDataAccessRepository<{0}, int> repository) \r\n" + " {{ \r\n" + " _repository = repository; \r\n" + " }} \r\n" + " \r\n" + " [HttpGet] \r\n" + " [Route(\"api/v1/{2}\")] \r\n" + " public IHttpActionResult Get() \r\n" + " {{ \r\n" + " var list = _repository.Get(); \r\n" + " #if DEBUG \r\n" + " list.ToList().ForEach(x => x.SetLinks()); \r\n" + " #endif \r\n" + " return Json(list); \r\n" + " }} \r\n" + " \r\n" + " [HttpGet] \r\n" + " [Route(\"api/v1/{2}/{{id}}\")] \r\n" + " public IHttpActionResult Get(int id) \r\n" + " {{ \r\n" + " return Json(_repository.Get(id)); \r\n" + " }} \r\n" + " \r\n" + " [HttpPost] \r\n" + " [Route(\"api/v1/{2}/create/\")] \r\n" + " public IHttpActionResult Post({0} {1}) \r\n" + " {{ \r\n" + " _repository.Post({1}); \r\n" + " return Json({1}); \r\n" + " }} \r\n" + " \r\n" + " [HttpPost] \r\n" + " [Route(\"api/v1/{2}/update/\")] \r\n" + " public IHttpActionResult Put({0} {1}) \r\n" + " {{ \r\n" + " _repository.Put({1}.Id, {1}); \r\n" + " return Json(\"OK\"); \r\n" + " }} \r\n" + " \r\n" + " [HttpPost] \r\n" + " [Route(\"api/v1/{2}/delete/\")] \r\n" + " public IHttpActionResult Delete(int id) \r\n" + " {{ \r\n" + " _repository.Delete(id); \r\n" + " return Json(HttpStatusCode.NoContent); \r\n" + " }} \r\n" + " \r\n" + " {3} \r\n" + " \r\n" + " }} \r\n" + "}} \r\n" , pascalNameOfClass , lowerSingleEntityName , lowerPluralEntityName , fkMethods ) ); } Util.IncludeInProject(csFile.Replace(@"..\..\..\BSS_WebAPI\", "")); } }
public void Generate() { // this call is needed to initialize the assembly var context = new BeSmartSportsEntities(); var theAssembly = AppDomain.CurrentDomain.GetAssemblies() .Where(a => a.GetName().ToString().StartsWith(string.Format("{0}, Version", DataAccessAssemblyName))) .First(); var theTypes = theAssembly.GetTypes() .Where(t => t.Namespace == EntityNamespace) .ToList(); var csFile = AutoMapperConfigFolder + "AutoMapperConfiguration.cs"; using (StreamWriter sw = new StreamWriter(csFile)) { sw.Write(string.Format( "using AutoMapper; \r\n" + "namespace BSS_WebAPI.EntityAutoMapper \r\n" + "{{ \r\n" + " public static class AutoMapperConfiguration \r\n" + " {{ \r\n" + " public static void Configure() \r\n" + " {{ \r\n" + " Mapper.Initialize(x => \r\n" + " {{ \r\n" )); foreach (var theType in theTypes) { var nameOfEntity = theType.Name; //USER if (nameOfEntity.ToLower() == "dbversion" || nameOfEntity.ToLower() == "sysdiagram") { continue; } if (nameOfEntity.ToLower() == DataModelToExclude.ToLower()) { continue; } if (nameOfEntity.ToLower().EndsWith("_result")) //SPs { continue; } var pascalNameOfClass = Util.ToPascalCase(nameOfEntity); //User sw.Write(string.Format(@" x.AddProfile(new {0}MapperProfile()); ", pascalNameOfClass)); } sw.Write(string.Format( "\r\n }}); \r\n" + " }} \r\n" + " }} \r\n" + "}} \r\n" )); } Util.IncludeInProject(csFile.Replace(@"..\..\..\BSS_WebAPI\", "")); }
public void GenerateMapperProfiles() { // this call is needed to initialize the assembly var context = new BeSmartSportsEntities(); var theAssembly = AppDomain.CurrentDomain.GetAssemblies() .Where(a => a.GetName().ToString().StartsWith(string.Format("{0}, Version", DataAccessAssemblyName))) .First(); var theTypes = theAssembly.GetTypes() .Where(t => t.Namespace == EntityNamespace) .ToList(); foreach (var theType in theTypes) { var nameOfEntity = theType.Name; //USER if (nameOfEntity.ToLower() == "dbversion" || nameOfEntity.ToLower() == "sysdiagram") { continue; } if (nameOfEntity.ToLower() == DataModelToExclude.ToLower()) { continue; } if (nameOfEntity.ToLower().EndsWith("_result")) //SPs { continue; } var pluralEntityName = nameOfEntity.Pluralize(); //USERs var pascalNameOfClass = Util.ToPascalCase(nameOfEntity); //User string updateCopy = null; foreach (var property in theType.GetProperties()) { string typeName = Util.GetTypeDisplayName(property.PropertyType); if (typeName.StartsWith("ICollection")) { continue; } if (typeName == typeName.ToUpper()) { continue; } if (property.Name == "ID") { continue; } updateCopy += string.Format(@"dbEntity.{0} = entity.{0}; ", property.Name); } var csFile = ProfileFolder + pascalNameOfClass + "MapperProfile.cs"; using (StreamWriter sw = new StreamWriter(csFile)) { sw.Write(string.Format( "using AutoMapper; \r\n" + " \r\n" + "namespace BSS_WebAPI.EntityAutoMapper \r\n" + "{{ \r\n" + " class {0}MapperProfile : Profile \r\n" + " {{ \r\n" + " protected override void Configure() \r\n" + " {{ \r\n" + " // Forward Mapping \r\n" + " SourceMemberNamingConvention = new PascalCaseNamingConvention(); \r\n" + " DestinationMemberNamingConvention = new MyUpperUnderscoreNamingConvention(); \r\n" + " CreateMap<Models.DTO.{0}, BSS_DataAccess.{1}>(); \r\n" + " \r\n" + " // Reverse Mapping \r\n" + " SourceMemberNamingConvention = new MyUpperUnderscoreNamingConvention(); \r\n" + " DestinationMemberNamingConvention = new PascalCaseNamingConvention(); \r\n" + " CreateMap<BSS_DataAccess.{1}, Models.DTO.{0}>(); \r\n" + " \r\n" + " // Mapper.AssertConfigurationIsValid(); \r\n" + " }} \r\n" + " }} \r\n" + "}} \r\n" , pascalNameOfClass , nameOfEntity )); } Util.IncludeInProject(csFile.Replace(@"..\..\..\BSS_WebAPI\", "")); } }
public void Generate() { // this call is needed to initialize the assembly var context = new BeSmartSportsEntities(); var theAssembly = AppDomain.CurrentDomain.GetAssemblies() .Where(a => a.GetName().ToString().StartsWith(string.Format("{0}, Version", DataAccessAssemblyName))) .First(); var theTypes = theAssembly.GetTypes() .Where(t => t.Namespace == EntityNamespace) .ToList(); var csFile = UnityConfigFolder + "UnityConfig.cs"; using (StreamWriter sw = new StreamWriter(csFile)) { sw.Write(string.Format( "using Microsoft.Practices.Unity; \r\n" + "using System.Web.Http; \r\n" + "using Unity.WebApi; \r\n" + "using BSS_WebAPI.Models.DTO; \r\n" + "using BSS_WebAPI.Repositories; \r\n" + " \r\n" + "namespace BSS_WebAPI \r\n" + "{{ \r\n" + " public static class UnityConfig \r\n" + " {{ \r\n" + " public static void RegisterComponents() \r\n" + " {{ \r\n" + " var container = new UnityContainer(); \r\n" + " \r\n" )); foreach (var theType in theTypes) { var nameOfEntity = theType.Name; //USER if (nameOfEntity.ToLower() == "dbversion" || nameOfEntity.ToLower() == "sysdiagram") { continue; } if (nameOfEntity.ToLower() == DataModelToExclude.ToLower()) { continue; } if (nameOfEntity.ToLower().EndsWith("_result")) //SPs { continue; } var pascalNameOfClass = Util.ToPascalCase(nameOfEntity); //User sw.Write(string.Format(@" container.RegisterType<IDataAccessRepository<{0}, int>, {0}Repository>(); ", pascalNameOfClass)); } sw.Write(string.Format( "\r\n GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container); \r\n" + " }} \r\n" + " }} \r\n" + "}} \r\n" )); } Util.IncludeInProject(csFile.Replace(@"..\..\..\BSS_WebAPI\", "")); }
public void GenerateDTOs() { // this call is needed to initialize the assembly var context = new BeSmartSportsEntities(); var theAssembly = AppDomain.CurrentDomain.GetAssemblies() .Where(a => a.GetName().ToString().StartsWith(string.Format("{0}, Version", DataAccessAssemblyName))) .First(); var theTypes = theAssembly.GetTypes() .Where(t => t.Namespace == EntityNamespace) .ToList(); foreach (var theType in theTypes) { var nameOfEntity = theType.Name; if (nameOfEntity.ToLower() == "dbversion" || nameOfEntity.ToLower() == "sysdiagram") { continue; } if (nameOfEntity.ToLower() == DataModelToExclude.ToLower()) { continue; } if (nameOfEntity.ToLower().EndsWith("_result")) //SPs { continue; } var pluralEntityName = nameOfEntity.Pluralize(); //USERs var pascalNameOfClass = Util.ToPascalCase(nameOfEntity); //User var lowerSingleEntityName = pascalNameOfClass.ToLower(); //user var lowerPluralEntityName = pluralEntityName.ToLower().Replace("_", "-"); //users var csFile = DtoFolder + Util.ToPascalCase(nameOfEntity) + ".cs"; using (StreamWriter sw = new StreamWriter(csFile)) { sw.Write(string.Format( @"using System; namespace BSS_WebAPI.Models.DTO {{ public class {0} : BaseDTO {{ ", pascalNameOfClass)); //FK Functions handling List <string> collectionsHandled = new List <string>(); string fkLinks = ""; var objectContext = ((IObjectContextAdapter)context).ObjectContext; var storageMetadata = ((EntityConnection)objectContext.Connection).GetMetadataWorkspace().GetItems(DataSpace.SSpace); var entityProps = (from s in storageMetadata where s.BuiltInTypeKind == BuiltInTypeKind.EntityType select s as EntityType); foreach (var property in theType.GetProperties()) { string typeName = Util.GetTypeDisplayName(property.PropertyType); if (typeName.StartsWith("ICollection")) { if (collectionsHandled.Contains(typeName)) { continue; } else { collectionsHandled.Add(typeName); } var fkTableName = typeName.Replace("ICollection<", "").Replace(">", ""); //USER var pluralFk = fkTableName.Pluralize(); //USERs var pascalFkClass = Util.ToPascalCase(fkTableName); //User var lowerSingleFkName = pascalFkClass.ToLower(); //user var lowerPluralFkName = pluralFk.ToLower().Replace("_", "-"); //users string fkColumnName = null; var personRightStorageMetadata = (from m in entityProps where m.Name == fkTableName select m).Single(); foreach (var item in personRightStorageMetadata.Properties) { Console.WriteLine(item.Name); var fkeys = ((EntityConnection)objectContext.Connection).GetMetadataWorkspace().GetItems <AssociationType>(DataSpace.CSpace).Where(a => a.IsForeignKey); //check if the table has any foreign constraints for that column var fknames = fkeys.Where(x => x.ReferentialConstraints[0].ToRole.Name == fkTableName).Where(x => x.ReferentialConstraints[0].ToProperties[0].Name == item.Name); //Get the corresponding reference entity column name foreach (var fkname in fknames) { var refConstraint = fkname.ReferentialConstraints[0]; if (refConstraint.FromRole.Name == nameOfEntity) { fkColumnName = refConstraint.ToProperties[0].Name; fkLinks += string.Format(@" Links.Add(""{2}:{3}"", string.Format(@""{0}/{1}/{{0}}/{2}/filter/{3}"" ,Id)); ", UrlBase, lowerPluralEntityName, lowerPluralFkName, fkColumnName.ToLower().Replace("_", "-")); } } } continue; } //if (typeName == typeName.ToUpper()) //FKs // continue; var propMetadata = (from m in entityProps where m.Name == nameOfEntity select m).Single(); foreach (var item in propMetadata.Properties) { Console.WriteLine(item.Name); if (property.Name == item.Name) // purpose: exclude FKs { sw.Write(string.Format(@" public {0} {1} {{ get; set; }}", typeName, Util.ToPascalCase(property.Name))); continue; } } } sw.Write(string.Format(@" public void SetLinks() {{ Links.Add(""self"", string.Format(@""http://*****:*****@" } }"); } Util.IncludeInProject(csFile.Replace(@"..\..\..\BSS_WebAPI\", "")); } }
public void GenerateDTORepositories() { // this call is needed to initialize the assembly var context = new BeSmartSportsEntities(); var theAssembly = AppDomain.CurrentDomain.GetAssemblies() .Where(a => a.GetName().ToString().StartsWith(string.Format("{0}, Version", DataAccessAssemblyName))) .First(); var theTypes = theAssembly.GetTypes() .Where(t => t.Namespace == EntityNamespace) .ToList(); foreach (var theType in theTypes) { var nameOfEntity = theType.Name; //USER if (nameOfEntity.ToLower() == "dbversion" || nameOfEntity.ToLower() == "sysdiagram") { continue; } if (nameOfEntity.ToLower() == DataModelToExclude.ToLower()) { continue; } if (nameOfEntity.ToLower().EndsWith("_result")) //SPs { continue; } var pluralEntityName = nameOfEntity.Pluralize(); //USERs var pascalNameOfClass = Util.ToPascalCase(nameOfEntity); //User string updateCopy = null; foreach (var property in theType.GetProperties()) { string typeName = Util.GetTypeDisplayName(property.PropertyType); if (typeName.StartsWith("ICollection")) { continue; } if (typeName == typeName.ToUpper()) { continue; } if (property.Name == "ID") { continue; } updateCopy += string.Format(@"dbEntity.{0} = entity.{0}; ", property.Name); } var csFile = ReposFolder + pascalNameOfClass + "Repository.cs"; using (StreamWriter sw = new StreamWriter(csFile)) { sw.Write(string.Format( "using System.Collections.Generic; \r\n" + "using System.Linq; \r\n" + "using BSS_DataAccess; \r\n" + "using Microsoft.Practices.Unity; \r\n" + "using AutoMapper; \r\n" + "using BSS_WebAPI.Models.DTO; \r\n" + " \r\n" + "namespace BSS_WebAPI.Repositories \r\n" + "{{ \r\n" + " public class {0}Repository : BaseDataAccessRepository, IDataAccessRepository<Models.DTO.{0}, int> \r\n" + " {{ \r\n" + " //[Dependency] \r\n" + " //public BeSmartSportsEntities Context {{ get; set; }} \r\n" + " \r\n" + " public IEnumerable<Models.DTO.{0}> Get() \r\n" + " {{ \r\n" + " var entityList = Context.{2}; \r\n" + " var dtoList = entityList.Select(Mapper.Map<BSS_DataAccess.{1}, Models.DTO.{0}>).ToList(); \r\n" + " return dtoList; \r\n" + " }} \r\n" + " \r\n" + " public Models.DTO.{0} Get(int id) \r\n" + " {{ \r\n" + " var dbEntity = Context.{2}.Find(id); \r\n" + " var dto = Mapper.Map<BSS_DataAccess.{1}, Models.DTO.{0}>(dbEntity); \r\n" + " return dto; \r\n" + " }} \r\n" + " \r\n" + " public void Post(Models.DTO.{0} dto) \r\n" + " {{ \r\n" + " var entity = Mapper.Map<Models.DTO.{0}, BSS_DataAccess.{1}>(dto); \r\n" + " Context.{2}.Add(entity); \r\n" + " Context.SaveChanges(); \r\n" + " dto.Id = entity.Id; \r\n" + " }} \r\n" + " \r\n" + " public void Put(int id, Models.DTO.{0} dto) \r\n" + " {{ \r\n" + " var entity = Mapper.Map<Models.DTO.{0}, BSS_DataAccess.{1}>(dto); \r\n" + " \r\n" + " var dbEntity = Context.{2}.Find(id); \r\n" + " if (dbEntity != null) \r\n" + " {{ \r\n" + " {3} \r\n" + " \r\n" + " Context.SaveChanges(); \r\n" + " }} \r\n" + " }} \r\n" + " \r\n" + " public void Delete(int id) \r\n" + " {{ \r\n" + " var dbEntity = Context.{2}.Find(id); \r\n" + " if (dbEntity != null) \r\n" + " {{ \r\n" + " Context.{2}.Remove(dbEntity); \r\n" + " Context.SaveChanges(); \r\n" + " }} \r\n" + " }} \r\n" + " }} \r\n" + "}} \r\n" , pascalNameOfClass , nameOfEntity , pluralEntityName , updateCopy) ); } Util.IncludeInProject(csFile.Replace(@"..\..\..\BSS_WebAPI\", "")); } }