Files

1179 lines
49 KiB
Plaintext

<%@ Template Language="C#" TargetLanguage="Text" Debug="True" OutputType="None" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="CodeSmith.CustomProperties" %>
<%@ Assembly Name="Mono.Cecil" Path="..\Libraries" %>
<%@ Assembly Name="ICSharpCode.NRefactory" Path="..\Libraries" %>
<%@ Assembly Name="ICSharpCode.NRefactory.CSharp" Path="..\Libraries" %>
<%@ Assembly Src="Common\Model.cs" %>
<%@ Assembly Src="Common\Extensions.cs" %>
<%@ Assembly Src="Common\Generator.cs" %>
<%@ Assembly Src="Common\Parser.cs" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Linq" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.Text.RegularExpressions" %>
<%@ Import Namespace="SchemaMapper" %>
<%@ Property Name="Database"
Type="SchemaExplorer.DatabaseSchema"
Category="1.数据库"
OnChanged="OnSourceDatabaseChanged"
Description="数据库" %>
<%@ Property Name="Namespace"
Type="System.String"
Category="2.1 命名空间"
Description="命名空间"%>
<%@ Property Name="DbName"
Type="System.String"
Category="2.2 数据库名"
Description="数据库名称,用于创建工作单元及其它类型名称,设置.将自动获取数据库名"%>
<%@ Property Name="TableNaming"
Type="SchemaMapper.TableNaming"
Category="3.Hints"
Default="Singular"
Description="Provide generator a hint as to how the tables are named." %>
<%@ Property Name="EntityNaming"
Type="SchemaMapper.EntityNaming"
Category="3.Hints"
Default="Singular"
Description="Tell generator how the entities are to be named." %>
<%@ Property Name="RelationshipNaming"
Type="SchemaMapper.RelationshipNaming"
Category="3.Hints"
Default="Plural"
Description="Tell generator how the relationships are to be named." %>
<%@ Property Name="ContextNaming"
Type="SchemaMapper.ContextNaming"
Category="3.Hints"
Default="Plural"
Description="Tell generator how the context properties are to be named." %>
<%@ Property Name="IgnoreList"
Type="CodeSmith.CustomProperties.StringCollection"
Category="4.Customization"
Default="sysdiagrams$"
Optional="True"
Description="List of regular expressions to ignore tables, views and commands when generating mapping." %>
<%@ Property Name="InclusionMode"
Type="Boolean"
Category="4.Customization"
Default="False"
Optional="True"
Description="Change the IgnoreList to be a list of table to include instead of ignore." %>
<%@ Property Name="CleanExpressions"
Type="CodeSmith.CustomProperties.StringCollection"
Category="4.Customization"
Default="^(sp|tbl|udf|vw)_"
Optional="True"
Description="List of regular expressions to clean table, view and column names." %>
<%@ Register Name="EntityBaseClass"
Template="Templates\Domains\Entity.Base.cst"
MergeProperties="False" %>
<%@ Register Name="EntityClass"
Template="Templates\Domains\Entity.cst"
MergeProperties="False" %>
<%@ Register Name="FactoryClass"
Template="Templates\Domains\Factory.cst"
MergeProperties="False" %>
<%@ Register Name="IRepositoryClass"
Template="Templates\Domains\IRepository.cst"
MergeProperties="False" %>
<%@ Register Name="RepositoryClass"
Template="Templates\Datas\Repository.cst"
MergeProperties="False" %>
<%@ Register Name="PoClass"
Template="Templates\PersistObjects\Datas\Po.cst"
MergeProperties="False" %>
<%@ Register Name="PoExtensionClass"
Template="Templates\PersistObjects\Datas\PoExtension.cst"
MergeProperties="False" %>
<%@ Register Name="SqlServerPoMappingClass"
Template="Templates\PersistObjects\Datas\SqlServer\PoMapping.cst"
MergeProperties="False" %>
<%@ Register Name="PgSqlPoMappingClass"
Template="Templates\PersistObjects\Datas\PgSql\PoMapping.cst"
MergeProperties="False" %>
<%@ Register Name="PoIRepositoryClass"
Template="Templates\PersistObjects\Domains\IRepository.cst"
MergeProperties="False" %>
<%@ Register Name="PoRepositoryClass"
Template="Templates\PersistObjects\Datas\Repository.cst"
MergeProperties="False" %>
<%@ Register Name="IStoreClass"
Template="Templates\PersistObjects\Datas\IStore.cst"
MergeProperties="False" %>
<%@ Register Name="StoreClass"
Template="Templates\PersistObjects\Datas\Store.cst"
MergeProperties="False" %>
<%@ Register Name="PoServiceClass"
Template="Templates\PersistObjects\Services\Service.cst"
MergeProperties="False" %>
<%@ Register Name="IUnitOfWorkClass"
Template="Templates\Datas\IUnitOfWork.cst"
MergeProperties="False" %>
<%@ Register Name="SqlServerUnitOfWorkClass"
Template="Templates\Datas\SqlServer\UnitOfWork.cst"
MergeProperties="False" %>
<%@ Register Name="SqlServerMappingClass"
Template="Templates\Datas\SqlServer\Mapping.cst"
MergeProperties="False" %>
<%@ Register Name="PgSqlUnitOfWorkClass"
Template="Templates\Datas\PgSql\UnitOfWork.cst"
MergeProperties="False" %>
<%@ Register Name="PgSqlMappingClass"
Template="Templates\Datas\PgSql\Mapping.cst"
MergeProperties="False" %>
<%@ Register Name="MySqlUnitOfWorkClass"
Template="Templates\Datas\MySql\UnitOfWork.cst"
MergeProperties="False" %>
<%@ Register Name="MySqlMappingClass"
Template="Templates\Datas\MySql\Mapping.cst"
MergeProperties="False" %>
<%@ Register Name="IocConfigClass"
Template="Templates\Services\IocConfig.cst"
MergeProperties="False" %>
<%@ Register Name="DtoClass"
Template="Templates\Services\Dto.cst"
MergeProperties="False" %>
<%@ Register Name="DtoExtensionClass"
Template="Templates\Services\DtoExtension.cst"
MergeProperties="False" %>
<%@ Register Name="QueryClass"
Template="Templates\Services\Query.cst"
MergeProperties="False" %>
<%@ Register Name="IServiceClass"
Template="Templates\Services\IService.cst"
MergeProperties="False" %>
<%@ Register Name="ServiceClass"
Template="Templates\Services\Service.cst"
MergeProperties="False" %>
<%@ Register Name="ApiControllerClass"
Template="Templates\Presentation\Controllers\ApiController.cst"
MergeProperties="False" %>
<%@ Register Name="IndexViewClass"
Template="Templates\Presentation\Pages\IndexView.cst"
MergeProperties="False" %>
<%@ Register Name="DialogIndexViewClass"
Template="Templates\Presentation\Pages\DialogIndexView.cst"
MergeProperties="False" %>
<%@ Register Name="QueryViewClass"
Template="Templates\Presentation\Pages\QueryView.cst"
MergeProperties="False" %>
<%@ Register Name="EditViewClass"
Template="Templates\Presentation\Pages\EditView.cst"
MergeProperties="False" %>
<%@ Register Name="DialogEditViewClass"
Template="Templates\Presentation\Pages\DialogEditView.cst"
MergeProperties="False" %>
<%@ Register Name="DetailViewClass"
Template="Templates\Presentation\Pages\DetailView.cst"
MergeProperties="False" %>
<%@ Register Name="DialogDetailViewClass"
Template="Templates\Presentation\Pages\DialogDetailView.cst"
MergeProperties="False" %>
<%@ Register Name="IndexComponentClass"
Template="Templates\Presentation\Typings\IndexComponent.cst"
MergeProperties="False" %>
<%@ Register Name="DialogIndexComponentClass"
Template="Templates\Presentation\Typings\DialogIndexComponent.cst"
MergeProperties="False" %>
<%@ Register Name="EditComponentClass"
Template="Templates\Presentation\Typings\EditComponent.cst"
MergeProperties="False" %>
<%@ Register Name="DialogEditComponentClass"
Template="Templates\Presentation\Typings\DialogEditComponent.cst"
MergeProperties="False" %>
<%@ Register Name="DetailComponentClass"
Template="Templates\Presentation\Typings\DetailComponent.cst"
MergeProperties="False" %>
<%@ Register Name="DialogDetailComponentClass"
Template="Templates\Presentation\Typings\DialogDetailComponent.cst"
MergeProperties="False" %>
<%@ Register Name="ModuleClass"
Template="Templates\Presentation\Typings\Module.cst"
MergeProperties="False" %>
<%@ Register Name="DialogModuleClass"
Template="Templates\Presentation\Typings\DialogModule.cst"
MergeProperties="False" %>
<%@ Register Name="RoutingClass"
Template="Templates\Presentation\Typings\Routing.cst"
MergeProperties="False" %>
<%@ Register Name="DialogRoutingClass"
Template="Templates\Presentation\Typings\DialogRouting.cst"
MergeProperties="False" %>
<%@ Register Name="QueryModelClass"
Template="Templates\Presentation\Typings\Query.cst"
MergeProperties="False" %>
<%@ Register Name="ViewModelClass"
Template="Templates\Presentation\Typings\ViewModel.cst"
MergeProperties="False" %>
<%@ Register Name="ItemGroupClass"
Template="Templates\Domains\ItemGroup.cst"
MergeProperties="False" %>
<%@ Register Name="EntityTestClass"
Template="Templates\Tests\EntityTest.cst"
MergeProperties="False" %>
<%@ Register Name="EntityTestDataClass"
Template="Templates\Tests\EntityTest.Data.cst"
MergeProperties="False" %>
<%@ Register Name="DtoTestClass"
Template="Templates\Tests\DtoTest.cst"
MergeProperties="False" %>
<%@ Register Name="ServiceTestClass"
Template="Templates\Tests\ServiceTest.cst"
MergeProperties="False" %>
<% Generate(); %>
<script runat="template">
public void Generate()
{
//创建生成器
Generator generator = new Generator();
//设置命名规则
generator.Settings.TableNaming = TableNaming;
generator.Settings.EntityNaming = EntityNaming;
generator.Settings.RelationshipNaming = RelationshipNaming;
generator.Settings.ContextNaming = ContextNaming;
//设置忽略列表
foreach(string s in IgnoreList)
if (!string.IsNullOrEmpty(s))
generator.Settings.IgnoreExpressions.Add(s);
foreach(string s in CleanExpressions)
if (!string.IsNullOrEmpty(s))
generator.Settings.CleanExpressions.Add(s);
//设置项处理完成事件
generator.SchemaItemProcessed += OnSchemaItemProcessed;
//获取实体上下文
EntityContext context = generator.Generate(Database);
//创建Ioc配置
CreateIocConfig( context );
//创建实体
CreateEntity(context);
//创建工厂
CreateFactory(context);
//创建仓储接口
CreateIRepository(context);
//创建仓储
CreateRepository( context );
//创建持久对象
CreatePo( context );
//创建持久对象扩展
CreatePoExtension( context );
//创建持久对象Sql Server映射
CreateSqlServerPoMapping(context);
//创建持久对象PgSql映射
CreatePgSqlPoMapping(context);
//创建持久化对象仓储接口
CreatePoIRepository(context);
//创建持久化对象仓储
CreatePoRepository( context );
//创建持久化应用服务实现
CreatePoService( context );
//创建持久化对象存储接口
CreateIStore( context );
//创建持久化对象存储
CreateStore( context );
//创建工作单元接口
CreateIUnitOfWork(context);
//创建Sql Server工作单元
CreateSqlServerUnitOfWork(context);
//创建Sql Server映射
CreateSqlServerMapping(context);
//创建PgSql工作单元
CreatePgSqlUnitOfWork(context);
//创建PgSql映射
CreatePgSqlMapping(context);
//创建MySql工作单元
CreateMySqlUnitOfWork(context);
//创建MySql映射
CreateMySqlMapping(context);
//创建Dto
CreateDto( context );
//创建Dto扩展
CreateDtoExtension( context );
//创建查询参数
CreateQuery( context );
//创建应用服务接口
CreateIService( context );
//创建应用服务实现
CreateService( context );
//创建Api控制器
CreateApiController( context );
//创建Index视图
CreateIndexView( context );
//创建弹出层Index视图
CreateDialogIndexView( context );
//创建Query视图
CreateQueryView( context );
//创建Edit视图
CreateEditView( context );
//创建弹出层Edit视图
CreateDialogEditView( context );
//创建Detail视图
CreateDetailView( context );
//创建弹出层Detail视图
CreateDialogDetailView( context );
//创建Index组件
CreateIndexComponent( context );
//创建弹出层Index组件
CreateDialogIndexComponent( context );
//创建Edit组件
CreateEditComponent( context );
//创建弹出层Edit组件
CreateDialogEditComponent( context );
//创建Detail组件
CreateDetailComponent( context );
//创建弹出层Detail组件
CreateDialogDetailComponent( context );
//创建angular模块
CreateModule( context );
//创建弹出层angular模块
CreateDialogModule( context );
//创建angular路由
CreateRouting( context );
//创建弹出层angular路由
CreateDialogRouting( context );
//创建angular查询参数
CreateQueryModel( context );
//创建angular视图模型
CreateViewModel( context );
//创建实体测试
CreateEntityTest( context );
//创建实体测试数据
CreateEntityTestData( context );
//创建Dto测试
CreateDtoTest( context );
//创建应用服务测试
CreateServiceTest( context );
//创建项目嵌套设置
CreateItemGroup(context);
//注册引用
this.RegisterReference("System.Configuration");
this.RegisterReference("System.Data");
this.RegisterReference("System.Data.Entity");
this.RegisterReference("System.Runtime.Serialization");
this.RegisterReference("EntityFramework");
}
/// <summary>
/// 获取工作单元接口命名空间
/// </summary>
private string GetIUnitOfWorkNamespace(EntityContext entityContext){
return Namespace == "." ? StringUtil.ToPlural( GetDbName(entityContext) ) : Namespace;
}
//获取路径
private string GetPath( string className,string directory = "",string extension = "cs" ){
string path = Path.GetFullPath(@".\02-Result");
if( string.IsNullOrWhiteSpace( directory ) == false )
path += @"\" + directory;
string file = className + "." + extension;
return Path.Combine(path, file);
}
/// <summary>
/// 获取数据库名称
/// </summary>
private string GetDbName( EntityContext entityContext ){
if( DbName == "." )
return entityContext.DatabaseName;
return DbName;
}
/// <summary>
/// 获取工作单元名称
/// </summary>
private string GetUnitOfWork( EntityContext entityContext ){
return GetDbName(entityContext) + "UnitOfWork";
}
/// <summary>
/// 获取架构名
/// </summary>
private string GetSchema( Entity entity ){
if( string.IsNullOrWhiteSpace( entity.TableName ) )
return "default";
return entity.TableSchema;
}
/// <summary>
/// 获取命名空间
/// </summary>
private string GetNamespace( Entity entity ){
return Namespace;
}
//创建实体
public void CreateEntity(EntityContext entityContext)
{
EntityBaseClass generatedClass = this.Create<EntityBaseClass>();
this.CopyPropertiesTo(generatedClass);
EntityClass editableClass = this.Create<EntityClass>();
this.CopyPropertiesTo(editableClass);
foreach(Entity entity in entityContext.Entities)
{
//创建可编辑文件
string className = entity.ClassName;
editableClass.Entity = entity;
editableClass.Namespace = GetNamespace(entity);
string editablePath = GetPath(className,string.Format("Domains\\{0}\\Models",GetSchema(entity)));
editableClass.RenderToFile(editablePath, true);
//创建基础文件
generatedClass.Entity = entity;
generatedClass.Namespace = GetNamespace(entity);
generatedClass.RenderToFile(GetPath(className+ ".Base", string.Format("Domains\\{0}\\Models",GetSchema(entity)) ), editablePath, true);
}
}
//创建工厂
public void CreateFactory(EntityContext entityContext)
{
FactoryClass result = this.Create<FactoryClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Factory", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,string.Format("Domains\\{0}\\Factories",GetSchema(entity))), true);
}
}
//创建仓储接口
public void CreateIRepository(EntityContext entityContext){
IRepositoryClass result = this.Create<IRepositoryClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "I{0}Repository", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,string.Format("Domains\\{0}\\Repositories",GetSchema(entity)) ), true);
}
}
//创建仓储
public void CreateRepository(EntityContext entityContext)
{
RepositoryClass result = this.Create<RepositoryClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Repository", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.UnitOfWork = GetUnitOfWork(entityContext);
result.IUnitOfWorkNamespace = GetIUnitOfWorkNamespace(entityContext);
result.RenderToFile(GetPath(className, string.Format("Datas\\Repositories\\{0}",GetSchema(entity)) ), true);
}
}
//创建持久对象
public void CreatePo(EntityContext entityContext)
{
PoClass result = this.Create<PoClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Po", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,string.Format("Persists\\Datas\\Pos\\{0}",GetSchema(entity)) ), true);
}
}
//创建持久对象扩展
public void CreatePoExtension(EntityContext entityContext)
{
PoExtensionClass result = this.Create<PoExtensionClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "Extension.{0}Po", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,string.Format("Persists\\Datas\\Pos\\{0}\\Extensions",GetSchema(entity)) ), true);
}
}
//创建持久对象Sql Server映射
public void CreateSqlServerPoMapping(EntityContext entityContext)
{
SqlServerPoMappingClass result = this.Create<SqlServerPoMappingClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}PoMap", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,string.Format("Persists\\Datas\\Mappings\\{0}\\SqlServer",GetSchema(entity)) ), true);
}
}
//创建持久对象PgSql映射
public void CreatePgSqlPoMapping(EntityContext entityContext)
{
PgSqlPoMappingClass result = this.Create<PgSqlPoMappingClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}PoMap", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,string.Format("Persists\\Datas\\Mappings\\{0}\\PgSql",GetSchema(entity)) ), true);
}
}
//创建创建持久化对象仓储接口
public void CreatePoIRepository(EntityContext entityContext){
PoIRepositoryClass result = this.Create<PoIRepositoryClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "I{0}Repository", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,string.Format("Persists\\Domains\\{0}\\Repositories",GetSchema(entity)) ), true);
}
}
//创建持久化对象仓储
public void CreatePoRepository(EntityContext entityContext)
{
PoRepositoryClass result = this.Create<PoRepositoryClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Repository", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.UnitOfWork = GetUnitOfWork(entityContext);
result.IUnitOfWorkNamespace = GetIUnitOfWorkNamespace(entityContext);
result.RenderToFile(GetPath(className,string.Format("Persists\\Datas\\Repositories\\{0}",GetSchema(entity)) ), true);
}
}
//创建持久化对象存储接口
public void CreateIStore(EntityContext entityContext)
{
IStoreClass result = this.Create<IStoreClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "I{0}PoStore", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.UnitOfWork = GetUnitOfWork(entityContext);
result.IUnitOfWorkNamespace = GetIUnitOfWorkNamespace(entityContext);
result.RenderToFile(GetPath(className,string.Format("Persists\\Datas\\Stores\\Abstractions\\{0}",GetSchema(entity)) ), true);
}
}
//创建持久化对象存储
public void CreateStore(EntityContext entityContext)
{
StoreClass result = this.Create<StoreClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}PoStore", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.UnitOfWork = GetUnitOfWork(entityContext);
result.IUnitOfWorkNamespace = GetIUnitOfWorkNamespace(entityContext);
result.RenderToFile(GetPath(className,string.Format("Persists\\Datas\\Stores\\Implements\\{0}",GetSchema(entity)) ), true);
}
}
//创建持久化应用服务实现
public void CreatePoService(EntityContext entityContext)
{
PoServiceClass result = this.Create<PoServiceClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Service",entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.UnitOfWork = GetUnitOfWork(entityContext);
result.IUnitOfWorkNamespace = GetIUnitOfWorkNamespace(entityContext);
result.RenderToFile(GetPath(className,string.Format("Persists\\Services\\{0}",GetSchema(entity)) ), true);
}
}
//创建工作单元接口
public void CreateIUnitOfWork(EntityContext entityContext)
{
IUnitOfWorkClass context = this.Create<IUnitOfWorkClass>();
this.CopyPropertiesTo(context);
string className = "I" + GetUnitOfWork(entityContext);
context.UnitOfWork = className;
context.Namespace = GetIUnitOfWorkNamespace(entityContext);
context.RenderToFile(GetPath(className,"Datas"), true);
}
//创建Sql Server工作单元
public void CreateSqlServerUnitOfWork(EntityContext entityContext)
{
SqlServerUnitOfWorkClass context = this.Create<SqlServerUnitOfWorkClass>();
this.CopyPropertiesTo(context);
string className = GetUnitOfWork(entityContext);
context.UnitOfWork = className;
context.EntityContext = entityContext;
context.DbName = GetDbName( entityContext );
context.Namespace = GetNamespace( entityContext.Entities.FirstOrDefault() );
context.IUnitOfWorkNamespace = GetIUnitOfWorkNamespace(entityContext);
context.RenderToFile(GetPath(className,"Datas\\UnitOfWorks\\SqlServer"), true);
}
//创建Sql Server映射
public void CreateSqlServerMapping(EntityContext entityContext)
{
SqlServerMappingClass result = this.Create<SqlServerMappingClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Map", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,string.Format("Datas\\Mappings\\{0}\\SqlServer",GetSchema(entity)) ), true);
}
}
//创建PgSql工作单元
public void CreatePgSqlUnitOfWork(EntityContext entityContext)
{
PgSqlUnitOfWorkClass context = this.Create<PgSqlUnitOfWorkClass>();
this.CopyPropertiesTo(context);
string className = GetUnitOfWork(entityContext);
context.UnitOfWork = className;
context.EntityContext = entityContext;
context.DbName = GetDbName( entityContext );
context.Namespace = GetNamespace( entityContext.Entities.FirstOrDefault() );
context.IUnitOfWorkNamespace = GetIUnitOfWorkNamespace(entityContext);
context.RenderToFile(GetPath(className,"Datas\\UnitOfWorks\\PgSql"), true);
}
//创建PgSql映射
public void CreatePgSqlMapping(EntityContext entityContext)
{
PgSqlMappingClass result = this.Create<PgSqlMappingClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Map", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,string.Format("Datas\\Mappings\\{0}\\PgSql",GetSchema(entity)) ), true);
}
}
//创建MySql工作单元
public void CreateMySqlUnitOfWork(EntityContext entityContext)
{
MySqlUnitOfWorkClass context = this.Create<MySqlUnitOfWorkClass>();
this.CopyPropertiesTo(context);
string className = GetUnitOfWork(entityContext);
context.UnitOfWork = className;
context.EntityContext = entityContext;
context.DbName = GetDbName( entityContext );
context.Namespace = GetNamespace( entityContext.Entities.FirstOrDefault() );
context.IUnitOfWorkNamespace = GetIUnitOfWorkNamespace(entityContext);
context.RenderToFile(GetPath(className,"Datas\\UnitOfWorks\\MySql"), true);
}
//创建MySql映射
public void CreateMySqlMapping(EntityContext entityContext)
{
MySqlMappingClass result = this.Create<MySqlMappingClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Map", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,string.Format("Datas\\Mappings\\{0}\\MySql",GetSchema(entity)) ), true);
}
}
//创建项目嵌套设置
public void CreateItemGroup(EntityContext entityContext){
ItemGroupClass result = this.Create<ItemGroupClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities) {
var list = entityContext.Entities.Where( t => t.TableSchema == entity.TableSchema ).ToList();
result.Entities = list;
result.RenderToFile(GetPath("ItemGroup","Domains\\" + GetSchema(entity),".txt"), true);
}
}
//创建Ioc配置
public void CreateIocConfig(EntityContext entityContext)
{
IocConfigClass result = this.Create<IocConfigClass>();
this.CopyPropertiesTo(result);
string className = "IocConfig";
result.EntityContext = entityContext;
result.Namespace = GetNamespace(entityContext.Entities.First());
result.DbName = GetDbName(entityContext);
result.RenderToFile(GetPath(className,"Services\\Configs"), true);
}
//创建Dto
public void CreateDto(EntityContext entityContext)
{
DtoClass result = this.Create<DtoClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Dto", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,"Services\\Dtos\\" + GetSchema(entity) ), true);
}
}
//创建Dto扩展
public void CreateDtoExtension(EntityContext entityContext)
{
DtoExtensionClass result = this.Create<DtoExtensionClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "Extensions.{0}Dto", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,"Services\\Dtos\\" + GetSchema(entity) + "\\Extensions"), true);
}
}
//创建查询参数
public void CreateQuery(EntityContext entityContext)
{
QueryClass result = this.Create<QueryClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Query", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,"Services\\Queries\\"+ GetSchema(entity)), true);
}
}
//创建应用服务接口
public void CreateIService(EntityContext entityContext)
{
IServiceClass result = this.Create<IServiceClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "I{0}Service", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,"Services\\Abstractions\\" + GetSchema(entity) ), true);
}
}
//创建应用服务实现
public void CreateService(EntityContext entityContext)
{
ServiceClass result = this.Create<ServiceClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Service",entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.UnitOfWork = GetUnitOfWork(entityContext);
result.IUnitOfWorkNamespace = GetIUnitOfWorkNamespace(entityContext);
result.RenderToFile(GetPath(className,"Services\\Implements\\" + GetSchema(entity) ), true);
}
}
//创建Api控制器
public void CreateApiController(EntityContext entityContext)
{
ApiControllerClass result = this.Create<ApiControllerClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Controller",entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.Schema = GetSchema(entity);
result.RenderToFile(GetPath(className,"Presentation\\Apis\\" + GetSchema(entity) ), true);
}
}
//创建Index视图
public void CreateIndexView(EntityContext entityContext)
{
IndexViewClass result = this.Create<IndexViewClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = "Index";
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Pages\\{0}\\{1}", GetSchema(entity),entity.ClassName ), "cshtml" ), true);
}
}
//创建弹出层Index视图
public void CreateDialogIndexView(EntityContext entityContext)
{
DialogIndexViewClass result = this.Create<DialogIndexViewClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = "Index";
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Pages\\{0}\\{1}\\Dialog\\", GetSchema(entity),entity.ClassName ), "cshtml" ), true);
}
}
//创建Query视图
public void CreateQueryView(EntityContext entityContext)
{
QueryViewClass result = this.Create<QueryViewClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = "Index.Query";
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Pages\\{0}\\{1}", GetSchema(entity),entity.ClassName ), "cshtml" ), true);
}
}
//创建Edit视图
public void CreateEditView(EntityContext entityContext)
{
EditViewClass result = this.Create<EditViewClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = "Edit";
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Pages\\{0}\\{1}", GetSchema(entity),entity.ClassName ), "cshtml" ), true);
}
}
//创建弹出层Edit视图
public void CreateDialogEditView(EntityContext entityContext)
{
DialogEditViewClass result = this.Create<DialogEditViewClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = "Edit";
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Pages\\{0}\\{1}\\Dialog\\", GetSchema(entity),entity.ClassName ), "cshtml" ), true);
}
}
//创建Detail视图
public void CreateDetailView(EntityContext entityContext)
{
DetailViewClass result = this.Create<DetailViewClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = "Detail";
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Pages\\{0}\\{1}", GetSchema(entity),entity.ClassName ), "cshtml" ), true);
}
}
//创建弹出层Detail视图
public void CreateDialogDetailView(EntityContext entityContext)
{
DialogDetailViewClass result = this.Create<DialogDetailViewClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = "Detail";
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Pages\\{0}\\{1}\\Dialog\\", GetSchema(entity),entity.ClassName ), "cshtml" ), true);
}
}
//创建Index组件
public void CreateIndexComponent(EntityContext entityContext)
{
IndexComponentClass result = this.Create<IndexComponentClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format("{0}-list.component",entity.ClassName.ToCamelCase());
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Typings\\app\\{0}\\{1}", GetSchema(entity).ToCamelCase(),entity.ClassName.ToCamelCase() ), "ts" ), true);
}
}
//创建弹出层Index组件
public void CreateDialogIndexComponent(EntityContext entityContext)
{
DialogIndexComponentClass result = this.Create<DialogIndexComponentClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format("{0}-list.component",entity.ClassName.ToCamelCase());
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Typings\\app\\{0}\\{1}\\dialog\\", GetSchema(entity).ToCamelCase(),entity.ClassName.ToCamelCase() ), "ts" ), true);
}
}
//创建Edit组件
public void CreateEditComponent(EntityContext entityContext)
{
EditComponentClass result = this.Create<EditComponentClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format("{0}-edit.component",entity.ClassName.ToCamelCase());
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Typings\\app\\{0}\\{1}", GetSchema(entity).ToCamelCase(),entity.ClassName.ToCamelCase() ), "ts" ), true);
}
}
//创建弹出层Edit组件
public void CreateDialogEditComponent(EntityContext entityContext)
{
DialogEditComponentClass result = this.Create<DialogEditComponentClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format("{0}-edit.component",entity.ClassName.ToCamelCase());
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Typings\\app\\{0}\\{1}\\dialog\\", GetSchema(entity).ToCamelCase(),entity.ClassName.ToCamelCase() ), "ts" ), true);
}
}
//创建Detail组件
public void CreateDetailComponent(EntityContext entityContext)
{
DetailComponentClass result = this.Create<DetailComponentClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format("{0}-detail.component",entity.ClassName.ToCamelCase());
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Typings\\app\\{0}\\{1}", GetSchema(entity).ToCamelCase(),entity.ClassName.ToCamelCase() ), "ts" ), true);
}
}
//创建弹出层Detail组件
public void CreateDialogDetailComponent(EntityContext entityContext)
{
DialogDetailComponentClass result = this.Create<DialogDetailComponentClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format("{0}-detail.component",entity.ClassName.ToCamelCase());
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Typings\\app\\{0}\\{1}\\dialog\\", GetSchema(entity).ToCamelCase(),entity.ClassName.ToCamelCase() ), "ts" ), true);
}
}
//创建angular模块
public void CreateModule(EntityContext entityContext)
{
ModuleClass result = this.Create<ModuleClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format("{0}.module",GetSchema(entity).ToSingular().ToCamelCase());
result.EntityContext = entityContext;
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Typings\\app\\{0}", GetSchema(entity).ToCamelCase() ), "ts" ), true);
}
}
//创建弹出层angular模块
public void CreateDialogModule(EntityContext entityContext)
{
DialogModuleClass result = this.Create<DialogModuleClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format("{0}.module",GetSchema(entity).ToSingular().ToCamelCase());
result.EntityContext = entityContext;
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Typings\\app\\{0}\\dialog\\", GetSchema(entity).ToCamelCase() ), "ts" ), true);
}
}
//创建angular路由
public void CreateRouting(EntityContext entityContext)
{
RoutingClass result = this.Create<RoutingClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format("{0}-routing.module",GetSchema(entity).ToSingular().ToCamelCase());
result.EntityContext = entityContext;
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Typings\\app\\{0}", GetSchema(entity).ToCamelCase() ), "ts" ), true);
}
}
//创建弹出层angular路由
public void CreateDialogRouting(EntityContext entityContext)
{
DialogRoutingClass result = this.Create<DialogRoutingClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format("{0}-routing.module",GetSchema(entity).ToSingular().ToCamelCase());
result.EntityContext = entityContext;
result.Entity = entity;
result.Namespace = GetSchema(entity).ToLower();
result.RenderToFile(GetPath(className,string.Format("Presentation\\Typings\\app\\{0}\\dialog\\", GetSchema(entity).ToCamelCase() ), "ts" ), true);
}
}
//创建angular查询参数
public void CreateQueryModel(EntityContext entityContext)
{
QueryModelClass result = this.Create<QueryModelClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}-query", entity.ClassName.ToCamelCase() );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,string.Format("Presentation\\Typings\\app\\{0}\\{1}\\model", GetSchema(entity).ToCamelCase(),entity.ClassName.ToCamelCase() ), "ts" ), true);
}
}
//创建angular视图模型
public void CreateViewModel(EntityContext entityContext)
{
ViewModelClass result = this.Create<ViewModelClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}-view-model", entity.ClassName.ToCamelCase() );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,string.Format("Presentation\\Typings\\app\\{0}\\{1}\\model", GetSchema(entity).ToCamelCase(),entity.ClassName.ToCamelCase() ), "ts" ), true);
}
}
//创建实体测试
public void CreateEntityTest(EntityContext entityContext)
{
EntityTestClass result = this.Create<EntityTestClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Test", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,"Tests\\UnitTests\\Models\\" + GetSchema(entity) ), true);
}
}
//创建实体测试数据
public void CreateEntityTestData(EntityContext entityContext)
{
EntityTestDataClass result = this.Create<EntityTestDataClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}Test.Data", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,"Tests\\UnitTests\\Models\\" + GetSchema(entity)), true);
}
}
//创建Dto测试
public void CreateDtoTest(EntityContext entityContext)
{
DtoTestClass result = this.Create<DtoTestClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}DtoTest", entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,"Tests\\IntegrationTests\\Dtos\\" + GetSchema(entity)), true);
}
}
//创建应用服务测试
public void CreateServiceTest(EntityContext entityContext)
{
ServiceTestClass result = this.Create<ServiceTestClass>();
this.CopyPropertiesTo(result);
foreach(Entity entity in entityContext.Entities)
{
string className = string.Format( "{0}ServiceTest",entity.ClassName );
result.Entity = entity;
result.Namespace = GetNamespace(entity);
result.RenderToFile(GetPath(className,"Tests\\IntegrationTests\\Services\\" + GetSchema(entity)), true);
}
}
private void OnSchemaItemProcessed(object sender, SchemaItemProcessedEventArgs e)
{
}
private void OnSourceDatabaseChanged(object sender, EventArgs e)
{
}
private void OnContextNamespaceChanged(object sender, EventArgs e)
{
}
</script>