public static RepositoryBaseClassDefinition GetRepositoryBaseClassDefinition(this DapperProject project)
        {
            var classDefinition = new RepositoryBaseClassDefinition();

            classDefinition.Namespaces.Add("System");
            classDefinition.Namespaces.Add("System.Linq");
            classDefinition.Namespaces.Add("System.Threading.Tasks");
            classDefinition.Namespaces.Add("Microsoft.Extensions.Options");

            classDefinition.Namespaces.Add(project.GetEntityLayerNamespace());

            classDefinition.Namespace = project.GetDataLayerContractsNamespace();

            classDefinition.Name = "Repository";

            classDefinition.Constructors.Add(new ClassConstructorDefinition(new ParameterDefinition("IOptions<AppSettings>", "appSettings"))
            {
                Lines = new List <ILine>
                {
                    new CodeLine("ConnectionString = appSettings.Value.ConnectionString;")
                }
            });

            classDefinition.Properties.Add(new PropertyDefinition("String", "ConnectionString ")
            {
                AccessModifier = AccessModifier.Protected,
                IsReadOnly     = true
            });

            return(classDefinition);
        }
Ejemplo n.º 2
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);
        }