public static RepositoryInterfaceDefinition GetRepositoryInterfaceDefinition(this EntityFrameworkCoreProject project) => new RepositoryInterfaceDefinition { Namespaces = { "System", "System.Threading.Tasks" }, Namespace = project.GetDataLayerContractsNamespace(), AccessModifier = AccessModifier.Public, Name = "IRepository", Implements = { "IDisposable" }, Methods = { new MethodDefinition("void", "Add", new ParameterDefinition("TEntity", "entity")) { GenericTypes = { new GenericTypeDefinition { Name = "TEntity", Constraint = "TEntity : class" } } }, new MethodDefinition("void", "Update", new ParameterDefinition("TEntity", "entity")) { GenericTypes = { new GenericTypeDefinition { Name = "TEntity", Constraint = "TEntity : class" } } }, new MethodDefinition("void", "Remove", new ParameterDefinition("TEntity", "entity")) { GenericTypes = { new GenericTypeDefinition { Name = "TEntity", Constraint = "TEntity : class" } } }, new MethodDefinition("int", "CommitChanges"), new MethodDefinition("Task<int>", "CommitChangesAsync") } };
public static CSharpInterfaceDefinition GetRepositoryInterfaceDefinition(this EntityFrameworkCoreProject project) { var interfaceDefinition = new CSharpInterfaceDefinition(); interfaceDefinition.Namespaces.Add("System"); interfaceDefinition.Namespaces.Add("System.Threading.Tasks"); interfaceDefinition.Namespace = project.GetDataLayerContractsNamespace(); interfaceDefinition.Name = "IRepository"; interfaceDefinition.Implements.Add("IDisposable"); interfaceDefinition.Methods.Add(new MethodDefinition("Int32", "CommitChanges")); interfaceDefinition.Methods.Add(new MethodDefinition("Task<Int32>", "CommitChangesAsync")); return(interfaceDefinition); }
public static RepositoryBaseClassDefinition GetRepositoryBaseClassDefinition(this EntityFrameworkCoreProject project) { var definition = new RepositoryBaseClassDefinition { 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 CSharpClassDefinition GetRepositoryBaseClassDefinition(this EntityFrameworkCoreProject project) { var classDefinition = new CSharpClassDefinition(); classDefinition.Namespaces.Add("System"); classDefinition.Namespaces.Add("System.Linq"); classDefinition.Namespaces.Add("System.Threading.Tasks"); classDefinition.Namespaces.Add("Microsoft.EntityFrameworkCore"); if (project.Settings.AuditEntity != null) { classDefinition.Namespaces.Add(project.GetEntityLayerNamespace()); } classDefinition.Namespace = project.GetDataLayerContractsNamespace(); classDefinition.Name = "Repository"; classDefinition.Fields.Add(new FieldDefinition(AccessModifier.Protected, "Boolean", "Disposed")); classDefinition.Fields.Add(new FieldDefinition(AccessModifier.Protected, project.Database.GetDbContextName(), "DbContext")); classDefinition.Constructors.Add(new ClassConstructorDefinition(new ParameterDefinition(project.Database.GetDbContextName(), "dbContext")) { Lines = new List <ILine>() { new CodeLine("DbContext = dbContext;") } }); classDefinition.Methods.Add(new MethodDefinition("void", "Dispose") { Lines = new List <ILine> { new CodeLine("if (!Disposed)"), new CodeLine("{"), new CodeLine(1, "DbContext?.Dispose();"), new CodeLine(), new CodeLine(1, "Disposed = true;"), new CodeLine("}") } }); classDefinition.Methods.Add(GetAddMethod(project)); classDefinition.Methods.Add(GetUpdateMethod(project)); classDefinition.Methods.Add(GetRemoveMethod(project)); classDefinition.Methods.Add(new MethodDefinition("Int32", "CommitChanges") { Lines = new List <ILine> { new CodeLine("return DbContext.SaveChanges();") } }); classDefinition.Methods.Add(new MethodDefinition("Task<Int32>", "CommitChangesAsync") { Lines = new List <ILine> { new CodeLine("return DbContext.SaveChangesAsync();") } }); return(classDefinition); }