Example #1
0
 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);
        }
Example #3
0
        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);
        }