Example #1
0
        public static PagingExtensionsClassDefinition GetRepositoryBaseClassDefinition(this EntityFrameworkCoreProject project)
        {
            var definition = new PagingExtensionsClassDefinition
            {
                Namespaces =
                {
                    "System",
                    "System.Threading.Tasks",
                },
                Namespace      = project.GetDataLayerContractsNamespace(),
                AccessModifier = AccessModifier.Public,
                Name           = "Repository",
                Fields         =
                {
                    new FieldDefinition(AccessModifier.Protected, "bool",                                     "Disposed"),
                    new FieldDefinition(AccessModifier.Protected, project.GetDbContextName(project.Database), "DbContext")
                    {
                        IsReadOnly = true
                    }
                },
                Constructors =
                {
                    new ClassConstructorDefinition(AccessModifier.Public, new ParameterDefinition(project.GetDbContextName(project.Database), "dbContext"))
                    {
                        Lines =
                        {
                            new CodeLine("DbContext = dbContext;")
                        }
                    }
                },
                Methods =
                {
                    new MethodDefinition(AccessModifier.Public,    "void", "Dispose")
                    {
                        IsVirtual = true,
                        Lines     =
                        {
                            new CodeLine("if (Disposed)"),
                            new CodeLine(1,                       "return;"),
                            new EmptyLine(),
                            new CodeLine("DbContext?.Dispose();"),
                            new EmptyLine(),
                            new CodeLine("Disposed = true;")
                        }
                    },
                    GetAddMethod(project),
                    GetUpdateMethod(project),
                    GetRemoveMethod(project),
                    new MethodDefinition(AccessModifier.Public,    "int", "CommitChanges")
                    {
                        Lines =
                        {
                            new CodeLine("return DbContext.SaveChanges();")
                        }
                    },
                    new MethodDefinition(AccessModifier.Public,    "Task<int>", "CommitChangesAsync")
                    {
                        IsAsync = true,
                        Lines   =
                        {
                            new CodeLine("return await DbContext.SaveChangesAsync();")
                        }
                    }
                }
            };

            var selection = project.GlobalSelection();

            if (selection.Settings.AuditEntity != null)
            {
                definition.Namespaces.Add(project.GetEntityLayerNamespace());
            }

            return(definition);
        }
        public static PagingExtensionsClassDefinition GetPagingExtensionsClassDefinition(this EntityFrameworkCoreProject project, bool isDomainDrivenDesign)
        {
            var definition = new PagingExtensionsClassDefinition
            {
                Namespaces =
                {
                    "System",
                    "System.Linq",
                },
                Namespace = isDomainDrivenDesign ? project.Name : project.GetDataLayerRepositoriesNamespace(),
                AccessModifier = AccessModifier.Public,
                IsStatic       = true,
                Name           = "PagingExtensions"
            };

            if (!isDomainDrivenDesign)
            {
                definition.Namespaces.Add(project.GetDataLayerNamespace());
                definition.Namespaces.Add(project.GetEntityLayerNamespace());
            }

            definition.Methods.Add(new MethodDefinition("IQueryable<TEntity>", "Paging", new ParameterDefinition(project.GetDbContextName(project.Database), "dbContext"), new ParameterDefinition("int", "pageSize", "0"), new ParameterDefinition("int", "pageNumber", "0"))
            {
                AccessModifier = AccessModifier.Public,
                IsExtension    = true,
                IsStatic       = true,
                GenericTypes   =
                {
                    new GenericTypeDefinition
                    {
                        Name       = "TEntity",
                        Constraint = "TEntity : class"
                    }
                },
                Lines =
                {
                    new CodeLine("var query = dbContext.Set<TEntity>().AsQueryable();"),
                    new CodeLine(),
                    new CodeLine("return pageSize > 0 && pageNumber > 0 ? query.Skip((pageNumber - 1) * pageSize).Take(pageSize) : query;")
                }
            });

            definition.Methods.Add(new MethodDefinition("IQueryable<TModel>", "Paging", new ParameterDefinition("IQueryable<TModel>", "query"), new ParameterDefinition("int", "pageSize", "0"), new ParameterDefinition("int", "pageNumber", "0"))
            {
                AccessModifier = AccessModifier.Public,
                IsExtension    = true,
                IsStatic       = true,
                GenericTypes   =
                {
                    new GenericTypeDefinition
                    {
                        Name       = "TModel",
                        Constraint = "TModel : class"
                    }
                },
                Lines =
                {
                    new CodeLine("return pageSize > 0 && pageNumber > 0 ? query.Skip((pageNumber - 1) * pageSize).Take(pageSize) : query;")
                }
            });

            return(definition);
        }