public static Task <GeneratePocoResponse> Generate(GeneratePocoRequest request)
        {
            return(Task.Run(() =>
            {
                using (var schemaReader = SchemaReaderProvider.GetReader(request.ServerType))
                {
                    var connectionString = request.ConnectionString;
                    if (schemaReader == null || string.IsNullOrEmpty(connectionString))
                    {
                        return new GeneratePocoResponse();
                    }

                    var tables = schemaReader.ReadSchema(connectionString);

                    if (tables == null || tables.Count <= 0)
                    {
                        throw new Exception(string.Format("Empty database or invalid connection string: {0}", connectionString));
                    }

                    var fileNames = new List <string>();
                    foreach (var table in tables)
                    {
                        var model = new ModelTemplate();
                        model.Namespace = request.Namespace;
                        model.IncludeRelationships = request.IncludeRelationship;
                        model.Table = table;
                        model.Tables = tables;

                        // get page content
                        string pageContent = model.TransformText();


                        if (!Directory.Exists(request.FolderLocation))
                        {
                            Directory.CreateDirectory(request.FolderLocation);
                        }

                        // Write model to file
                        string fileName = table.ClassName + ".cs";
                        File.WriteAllText(Path.Combine(request.FolderLocation, fileName), pageContent);
                        fileNames.Add(fileName);
                    }

                    var response = new GeneratePocoResponse();
                    response.Filenames = fileNames;
                    return response;
                }
            }));
        }
Ejemplo n.º 2
0
        private async void Generate()
        {
            try
            {
                // Reset content
                FileItems    = new ObservableCollection <string>();
                SelectedFile = string.Empty;

                ShowBuildrogress = true;
                var          request    = new GeneratePocoRequest();
                DbServerType serverType = (DbServerType)Enum.Parse(typeof(DbServerType), SelectedDatabaseTypeItem);
                request.ServerType          = serverType;
                request.Namespace           = Namespace;
                request.FolderLocation      = ModelsFolderLocation;
                request.IncludeRelationship = IncludeRelationship;
                request.ConnectionString    = GetConnectionString(serverType);

                if (string.IsNullOrEmpty(request.ConnectionString))
                {
                    throw new Exception("Invalid database info provided!");
                }

                var pocoResponse = await GeneratePocoModels.Generate(request);

                if (pocoResponse != null && pocoResponse.Filenames != null)
                {
                    var fileNames = pocoResponse.Filenames;
                    FileItems    = new ObservableCollection <string>(fileNames);
                    SelectedFile = string.Empty;
                    if (fileNames.Count > 0)
                    {
                        SelectedFile = fileNames[0];
                        FileSelectionChanged();
                    }
                }
            }
            finally
            {
                ShowBuildrogress = false;
            }
        }