示例#1
0
        internal SchemaFilterEntryBag CreateSchemaFilterEntryBag()
        {
            var schemaFilterEntryBag = new SchemaFilterEntryBag();
            foreach (var treeView in _treeViews)
            {
                TreeViewSchemaFilterMapperSettings settings;
                _treeView2Settings.TryGetValue(treeView, out settings);

                foreach (TreeNode parentNode in treeView.Nodes)
                {
                    foreach (TreeNode schemaNode in parentNode.Nodes)
                    {
                        foreach (TreeNode child in schemaNode.Nodes)
                        {
                            UpdateSchemaFilterEntryBagFromLeafNode(child, schemaFilterEntryBag, settings);
                        }
                    }
                }
            }
            return schemaFilterEntryBag;
        }
示例#2
0
        private static void UpdateSchemaFilterEntryBagFromLeafNode(
            TreeNode leafNode, SchemaFilterEntryBag schemaFilterEntryBag, TreeViewSchemaFilterMapperSettings settings)
        {
            Debug.Assert(
                settings != null,
                "We should not be passing null settings into this method; they should at least be the default settings");
            if (settings == null)
            {
                return;
            }

            var e = leafNode.Tag as EntityStoreSchemaFilterEntry;
            Debug.Assert(
                e != null,
                "Either the Tag property of the leaf node is null or the leaf node is not an EntityStoreSchemaFilterEntry");
            if (e != null)
            {
                switch (e.Types)
                {
                    case EntityStoreSchemaFilterObjectTypes.Table:
                        if (false == settings.UseOnlyCheckedNodes
                            || leafNode.Checked)
                        {
                            schemaFilterEntryBag.IncludedTableEntries.Add(e);
                        }
                        else
                        {
                            schemaFilterEntryBag.ExcludedTableEntries.Add(
                                new EntityStoreSchemaFilterEntry(
                                    e.Catalog, e.Schema, e.Name, e.Types, EntityStoreSchemaFilterEffect.Exclude));
                        }
                        break;
                    case EntityStoreSchemaFilterObjectTypes.View:
                        if (false == settings.UseOnlyCheckedNodes
                            || leafNode.Checked)
                        {
                            schemaFilterEntryBag.IncludedViewEntries.Add(e);
                        }
                        else
                        {
                            schemaFilterEntryBag.ExcludedViewEntries.Add(
                                new EntityStoreSchemaFilterEntry(
                                    e.Catalog, e.Schema, e.Name, e.Types, EntityStoreSchemaFilterEffect.Exclude));
                        }
                        break;
                    case EntityStoreSchemaFilterObjectTypes.Function:
                        if (false == settings.UseOnlyCheckedNodes
                            || leafNode.Checked)
                        {
                            schemaFilterEntryBag.IncludedSprocEntries.Add(e);
                        }
                        else
                        {
                            schemaFilterEntryBag.ExcludedSprocEntries.Add(
                                new EntityStoreSchemaFilterEntry(
                                    e.Catalog, e.Schema, e.Name, e.Types, EntityStoreSchemaFilterEffect.Exclude));
                        }
                        break;
                    default:
                        Debug.Fail("Unexpected filter object type");
                        break;
                }
            }
        }
示例#3
0
        public IEnumerable <KeyValuePair <string, string> > generate(string connectionString, string projectName, string @namespace, DatabaseSetting dbSetting)
        {
            try
            {
                DatabaseManager dbManager = new DatabaseManager(connectionString, dbSetting);
                if (!dbManager.connect())
                {
                    return(null);
                }
                var schemaFilterEntryBag = new SchemaFilterEntryBag();
                var databaseTables       = new ArrayList();
                databaseTables = dbManager.GetDatabaseTables();
                if (databaseTables.Count != 0)
                {
                    for (var i = 0; i < databaseTables.Count; i++)
                    {
                        var tableItem = (Tuple <string, string, string>)(databaseTables[i]);
                        var item      = new EntityStoreSchemaFilterEntry(tableItem.Item1,
                                                                         tableItem.Item2, tableItem.Item3, EntityStoreSchemaFilterObjectTypes.Table,
                                                                         EntityStoreSchemaFilterEffect.Allow);
                        schemaFilterEntryBag.IncludedTableEntries.Add(item);
                    }
                }
                var databaseViews = new ArrayList();
                databaseViews = dbManager.GetDatabaseViews();
                if (databaseViews.Count != 0)
                {
                    for (var i = 0; i < databaseViews.Count; i++)
                    {
                        var viewItem = (Tuple <string, string, string>)(databaseViews[i]);
                        var item     = new EntityStoreSchemaFilterEntry(viewItem.Item1,
                                                                        viewItem.Item2, viewItem.Item3, EntityStoreSchemaFilterObjectTypes.View,
                                                                        EntityStoreSchemaFilterEffect.Allow);
                        schemaFilterEntryBag.IncludedViewEntries.Add(item);
                    }
                }


                var modelBuilderSettings = new ModelBuilderSettings();
                modelBuilderSettings._designTimeConnectionString      = connectionString;
                modelBuilderSettings._designTimeProviderInvariantName =
                    dbSetting.ProviderInvariantName;
                modelBuilderSettings._runtimeProviderInvariantName =
                    dbSetting.ProviderInvariantName;
                modelBuilderSettings.UsePluralizationService   = true;
                modelBuilderSettings.IncludeForeignKeysInModel = true;

                modelBuilderSettings.DatabaseObjectFilters =
                    schemaFilterEntryBag.CollapseAndOptimize(SchemaFilterPolicy.GetByValEdmxPolicy());
                modelBuilderSettings.ModelBuilderEngine = new CodeFirstModelBuilderEngine();
                // The latest EntityFramework version
                modelBuilderSettings.TargetSchemaVersion = new Version(3, 0, 0, 0);

                // Get the providerManifestTokern
                IDbDependencyResolver resolver = Microsoft.Data.Entity.Design.VersioningFacade.DependencyResolver.Instance;
                var providerServices           =
                    resolver.GetService <System.Data.Entity.Core.Common.DbProviderServices>(dbSetting.ProviderInvariantName);
                var factory      = DbProviderFactories.GetFactory(dbSetting.ProviderInvariantName);
                var dbconnection = factory.CreateConnection();
                dbconnection.ConnectionString = connectionString;
                Debug.Assert(providerServices != null, "Trying to get unregistered provider.");
                modelBuilderSettings.ProviderManifestToken = providerServices.GetProviderManifestToken(dbconnection);

                // the function provided by EntityFramework to generate model from a database
                var mbe = modelBuilderSettings.ModelBuilderEngine;
                mbe.GenerateModel(modelBuilderSettings);

                // the function provided by EntityFramework to generate code from a model
                var    generator = new CodeFirstModelGenerator();
                var    result    = generator.Generate(mbe.Model, @namespace + ".Models", projectName + "DbContext", projectName);
                string key       = projectName + "DbContext.cs";
                if (dbSetting.DBType == DatabaseType.MYSQL)
                {
                    return(result.Where(c => !c.Key.Equals(key)).Concat(
                               new[] { new KeyValuePair <string, string>(key, addMySqlNamespace(result.First(c => c.Key.Equals(key)).Value)) }));
                }

                return(result);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return(null);
            }
        }