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); }