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; }
/// <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; }
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 : "")); } }
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); }