Beispiel #1
0
        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\", ""));
        }
Beispiel #4
0
        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\", ""));
            }
        }
Beispiel #5
0
        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\", ""));
        }
Beispiel #6
0
        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\", ""));
            }
        }
Beispiel #7
0
        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\", ""));
            }
        }