public void GetAndCreateTest()
        {
            GeneratorSettings generatorSettings = new GeneratorSettings();
            UniqueNamer uniqueNamer = new UniqueNamer();
            TemplateContent templateContent = new TemplateContent(generatorSettings, uniqueNamer);

            AbpDbContentTemplate abpDbContentTemplate = new AbpDbContentTemplate(templateContent);
            MySQLSchemaProvider mySqlSchemaProvider = new MySQLSchemaProvider();
            const string mysqlConn = "Server=127.0.0.1;Database=esms;Uid=root;Pwd=123qwe!@#;";
            SchemaSelector schemaSelector = new SchemaSelector(mySqlSchemaProvider, mysqlConn);

            foreach (TableSchema tableSchema in schemaSelector.Tables)
            {
                foreach (DataObjectBase columnSchema in tableSchema.Columns)
                {
                    Console.WriteLine(columnSchema.FullName);
                }
            }

            //EntityContext<AbpEntity, AbpEntityProperty> entityContext = abpDbContentTemplate.GetAndCreate(schemaSelector);
            //Entity<AbpEntityProperty> entity = entityContext.Entities.First(t => t.ClassName == "SysUser");

            //foreach (Relationship relationship in entity.Relationships.Where(t=>t.ThisEntity.Contains("SysUser")&&t.ThisPropertyName=="LastRole"))
            //{
            //    Console.WriteLine(relationship.JoinTable);
            //}
        }
        private SchemaSelector GetDatabaseSchema(string name)
        {
            var databaseSchema = DatabaseSchemaSerializer.GetDatabaseSchemaFromName(name);            
            
            var selector = new SchemaSelector(databaseSchema.Provider, databaseSchema.ConnectionString);
            selector.Database.DeepLoad = true;

            return selector;
        }
예제 #3
0
        /// <summary>
        /// 根据数据库结构获取实体上下文对象
        /// </summary>
        /// <param name="databaseSchema">数据库结构</param>
        /// <returns></returns>
        public EntityContext Generate(SchemaSelector databaseSchema)
        {
            EntityContext entityContext = new EntityContext { DatabaseName = databaseSchema.Database.Name };

            string dataContextName = StringUtil.ToPascalCase(entityContext.DatabaseName) + "Context";
            dataContextName = _namer.UniqueClassName(dataContextName);

            entityContext.ClassName = dataContextName;

            var tables = databaseSchema.Tables
                .Selected()
                .OrderBy(t => t.SortName)
                .ToTables();

            foreach (TableSchema t in tables)
            {
                if (IsManyToMany(t))
                {
                    Debug.WriteLine("多对多表: " + t.FullName);
                    CreateManyToMany(entityContext, t);
                }
                else
                {
                    Debug.WriteLine("表: " + t.FullName);
                    GetEntity(entityContext, t);
                }

                OnSchemaItemProcessed(t.FullName);
            }

            if (!Settings.IncludeViews) return entityContext;
            // 数据库视图生成EF实体
            var views = databaseSchema.Views
                .Selected()
                .OrderBy(t => t.SortName)
                .ToViews();
            foreach (ViewSchema v in views)
            {
                Debug.WriteLine("视图: " + v.FullName);
                GetEntity(entityContext, v);
                OnSchemaItemProcessed(v.FullName);
            }

            return entityContext;
        }
예제 #4
0
        public void GenerateTest()
        {
            GeneratorSettings generatorSettings = new GeneratorSettings();
            MySQLSchemaProvider mySqlSchemaProvider = new MySQLSchemaProvider();
            const string mysqlConn = "Server=127.0.0.1;Database=yt_qd_ytsf;Uid=root;Pwd=123qwe!@#;";
            SchemaSelector schemaSelector = new SchemaSelector(mySqlSchemaProvider, mysqlConn);
            Generator generator = new Generator();
            generator.Settings.TableNaming = generatorSettings.TableNaming;
            generator.Settings.EntityNaming = generatorSettings.EntityNaming;
            generator.Settings.RelationshipNaming = generatorSettings.RelationshipNaming;
            generator.Settings.ContextNaming = generatorSettings.ContextNaming;
            EntityContext entityContext = generator.Generate(schemaSelector);
            foreach (Entity entity in entityContext.Entities)
            {
                Property property =
                    entity.Properties.FirstOrDefault(
                        t => (t.IsPrimaryKey.HasValue && t.IsPrimaryKey.Value) && (t.IsIdentity.HasValue && t.IsIdentity.Value));
                Console.WriteLine(entity.ClassName + " --- " + (property != null ? property.PropertyName : ""));

            }
        }
예제 #5
0
        public EntityContext <TEntity, TProperty> GetAndCreate(SchemaSelector databaseSchema)
        {
            EntityContext <TEntity, TProperty> entityContext = new EntityContext <TEntity, TProperty>
            {
                DatabaseName = databaseSchema.Database.Name
            };

            string dataContextName = StringUtil.ToPascalCase(entityContext.DatabaseName) + "Context";

            dataContextName = _content.UniqueNamer.UniqueClassName(dataContextName);

            entityContext.ClassName = dataContextName;

            var tables = databaseSchema.Tables
                         .Selected()
                         .OrderBy(t => t.SortName)
                         .ToTables();

            _entityTemplate.EntityContext = entityContext;

            _viewEntityTemplate = new ViewEntityTemplate <TEntity, TProperty>(_content)
            {
                EntityContext = entityContext
            };

            //先进行装载实体
            foreach (TableSchema t in tables)
            {
                if (_content.IsManyToMany(t))
                {
                    Debug.WriteLine("多对多表: " + t.FullName);
                    CreateManyToMany(t);
                }
                else
                {
                    Debug.WriteLine("表: " + t.FullName);
                    _entityTemplate.GetAndCreate(t);
                }

                OnSchemaItemProcessed(t.FullName);
            }

            RelationshipTemplate <TEntity, TProperty> relationshipTemplate = new RelationshipTemplate <TEntity, TProperty>(_content)
            {
                EntityContext = entityContext
            };

            MethodTemplate <TEntity, TProperty> methodTemplate = new MethodTemplate <TEntity, TProperty>();

            foreach (TEntity entity in entityContext.Entities)
            {
                TableSchema tableSchema = databaseSchema.Tables.FirstOrDefault(t => t.FullName == entity.FullName);
                if (tableSchema == null)
                {
                    continue;
                }

                relationshipTemplate.ForeignEntity = entity;
                foreach (TableKeySchema tableKey in tableSchema.ForeignKeys.Selected())
                {
                    relationshipTemplate.GetAndCreate(tableKey);
                }

                methodTemplate.Entity = entity;
                methodTemplate.GetAndCreate(tableSchema);
            }

            if (!_content.Settings.IncludeViews)
            {
                return(entityContext);
            }
            // 数据库视图生成EF实体
            var views = databaseSchema.Views
                        .Selected()
                        .OrderBy(t => t.SortName)
                        .ToViews();

            foreach (ViewSchema v in views)
            {
                Debug.WriteLine("视图: " + v.FullName);
                _viewEntityTemplate.GetAndCreate(v);
                OnSchemaItemProcessed(v.FullName);
            }

            return(entityContext);
        }