移除旧的模板
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
e2dd4b2466
commit
c8596c6815
|
@ -19,7 +19,7 @@ Write-Host $tablesForScaffold
|
|||
Write-Host "正在执行 Scaffold-DbContext..."
|
||||
|
||||
#dotnet ef dbcontext scaffold "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true" Microsoft.EntityFrameworkCore.SqlServer -p IRaCIS.Core.Test -d -o GenerateFolder -c "TempContext" $tablesForScaffold
|
||||
$scaffoldCommand = "dotnet ef dbcontext scaffold `"Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true`" Microsoft.EntityFrameworkCore.SqlServer -p IRaCIS.Core.Test -d -o GenerateFolder -c `"TempContext`" $tablesForScaffold"
|
||||
$scaffoldCommand = "dotnet ef dbcontext scaffold `"Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true`" Microsoft.EntityFrameworkCore.SqlServer -p IRaCIS.Core.Test -d -o GenerateContextModelFolder -c `"TempContext`" $tablesForScaffold"
|
||||
Invoke-Expression $scaffoldCommand
|
||||
|
||||
|
|
@ -1,324 +0,0 @@
|
|||
<#+
|
||||
public class config
|
||||
{
|
||||
public static readonly string ConnectionString = "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true";
|
||||
public static readonly string DbDatabase = "Test_IRC";
|
||||
//表名称用字符串,拼接
|
||||
public static readonly string TableName = "UserFeedBack";
|
||||
//具体文件里面 例如service 可以配置是否分页
|
||||
}
|
||||
#>
|
||||
<#+
|
||||
public class DbHelper
|
||||
{
|
||||
#region GetDbTables
|
||||
|
||||
public static List<string> GetDbTablesNew(string connectionString, string database,string tables = null)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(tables))
|
||||
{
|
||||
tables = string.Format(" and obj.name in ('{0}')", tables.Replace(",", "','"));
|
||||
}
|
||||
string sql = string.Format(@"SELECT
|
||||
obj.name tablename
|
||||
from {0}.sys.objects obj
|
||||
inner join {0}.dbo.sysindexes idx on obj.object_id=idx.id and idx.indid<=1
|
||||
INNER JOIN {0}.sys.schemas schem ON obj.schema_id=schem.schema_id
|
||||
left join {0}.sys.extended_properties g ON (obj.object_id = g.major_id AND g.minor_id = 0 AND g.name= 'MS_Description')
|
||||
where type='U' {1}
|
||||
order by obj.name", database,tables);
|
||||
DataTable dt = GetDataTable(connectionString, sql);
|
||||
return dt.Rows.Cast<DataRow>().Select(row =>row.Field<string>("tablename")).ToList();
|
||||
}
|
||||
|
||||
public static List<DbTable> GetDbTables(string connectionString, string database, string tables = null)
|
||||
{
|
||||
|
||||
if (!string.IsNullOrEmpty(tables))
|
||||
{
|
||||
tables = string.Format(" and obj.name in ('{0}')", tables.Replace(",", "','"));
|
||||
}
|
||||
#region SQL
|
||||
string sql = string.Format(@"SELECT
|
||||
obj.name tablename,
|
||||
schem.name schemname,
|
||||
idx.rows,
|
||||
CAST
|
||||
(
|
||||
CASE
|
||||
WHEN (SELECT COUNT(1) FROM sys.indexes WHERE object_id= obj.OBJECT_ID AND is_primary_key=1) >=1 THEN 1
|
||||
ELSE 0
|
||||
END
|
||||
AS BIT) HasPrimaryKey
|
||||
from {0}.sys.objects obj
|
||||
inner join {0}.dbo.sysindexes idx on obj.object_id=idx.id and idx.indid<=1
|
||||
INNER JOIN {0}.sys.schemas schem ON obj.schema_id=schem.schema_id
|
||||
where type='U' {1}
|
||||
order by obj.name", database, tables);
|
||||
#endregion
|
||||
DataTable dt = GetDataTable(connectionString, sql);
|
||||
return dt.Rows.Cast<DataRow>().Select(row => new DbTable
|
||||
{
|
||||
TableName = row.Field<string>("tablename"),
|
||||
SchemaName = row.Field<string>("schemname"),
|
||||
Rows = row.Field<int>("rows"),
|
||||
HasPrimaryKey = row.Field<bool>("HasPrimaryKey")
|
||||
}).ToList();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region GetDbColumns
|
||||
|
||||
public static List<DbColumn> GetDbColumns(string connectionString, string database, string tableName, string schema = "dbo")
|
||||
{
|
||||
#region SQL
|
||||
string sql = string.Format(@"
|
||||
WITH indexCTE AS
|
||||
(
|
||||
SELECT
|
||||
ic.column_id,
|
||||
ic.index_column_id,
|
||||
ic.object_id
|
||||
FROM {0}.sys.indexes idx
|
||||
INNER JOIN {0}.sys.index_columns ic ON idx.index_id = ic.index_id AND idx.object_id = ic.object_id
|
||||
WHERE idx.object_id =OBJECT_ID(@tableName) AND idx.is_primary_key=1
|
||||
)
|
||||
select
|
||||
colm.column_id ColumnID,
|
||||
CAST(CASE WHEN indexCTE.column_id IS NULL THEN 0 ELSE 1 END AS BIT) IsPrimaryKey,
|
||||
colm.name ColumnName,
|
||||
systype.name ColumnType,
|
||||
colm.is_identity IsIdentity,
|
||||
colm.is_nullable IsNullable,
|
||||
cast(colm.max_length as int) ByteLength,
|
||||
(
|
||||
case
|
||||
when systype.name='nvarchar' and colm.max_length>0 then colm.max_length/2
|
||||
when systype.name='nchar' and colm.max_length>0 then colm.max_length/2
|
||||
when systype.name='ntext' and colm.max_length>0 then colm.max_length/2
|
||||
else colm.max_length
|
||||
end
|
||||
) CharLength,
|
||||
cast(colm.precision as int) Precision,
|
||||
cast(colm.scale as int) Scale,
|
||||
prop.value Remark
|
||||
from {0}.sys.columns colm
|
||||
inner join {0}.sys.types systype on colm.system_type_id=systype.system_type_id and colm.user_type_id=systype.user_type_id
|
||||
left join {0}.sys.extended_properties prop on colm.object_id=prop.major_id and colm.column_id=prop.minor_id
|
||||
LEFT JOIN indexCTE ON colm.column_id=indexCTE.column_id AND colm.object_id=indexCTE.object_id
|
||||
where colm.object_id=OBJECT_ID(@tableName)
|
||||
order by colm.column_id", database);
|
||||
#endregion
|
||||
SqlParameter param = new SqlParameter("@tableName", SqlDbType.NVarChar, 100) { Value = string.Format("{0}.{1}.{2}", database, schema, tableName) };
|
||||
DataTable dt = GetDataTable(connectionString, sql, param);
|
||||
return dt.Rows.Cast<DataRow>().Select(row => new DbColumn()
|
||||
{
|
||||
ColumnID = row.Field<int>("ColumnID"),
|
||||
IsPrimaryKey = row.Field<bool>("IsPrimaryKey"),
|
||||
ColumnName = row.Field<string>("ColumnName"),
|
||||
ColumnType = row.Field<string>("ColumnType"),
|
||||
IsIdentity = row.Field<bool>("IsIdentity"),
|
||||
IsNullable = row.Field<bool>("IsNullable"),
|
||||
ByteLength = row.Field<int>("ByteLength"),
|
||||
CharLength = row.Field<int>("CharLength"),
|
||||
Precision=row.Field<int>("Precision"),
|
||||
Scale = row.Field<int>("Scale"),
|
||||
Remark = row["Remark"].ToString()
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region GetDataTable
|
||||
|
||||
public static DataTable GetDataTable(string connectionString, string commandText, params SqlParameter[] parms)
|
||||
{
|
||||
using (SqlConnection connection = new SqlConnection(connectionString))
|
||||
{
|
||||
SqlCommand command = connection.CreateCommand();
|
||||
command.CommandText = commandText;
|
||||
command.Parameters.AddRange(parms);
|
||||
SqlDataAdapter adapter = new SqlDataAdapter(command);
|
||||
|
||||
DataTable dt = new DataTable();
|
||||
adapter.Fill(dt);
|
||||
|
||||
return dt;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region GetPrimaryKey
|
||||
public static string GetPrimaryKey(List<DbColumn> dbColumns)
|
||||
{
|
||||
string primaryKey = string.Empty;
|
||||
if (dbColumns!=null&&dbColumns.Count>0)
|
||||
{
|
||||
foreach (var item in dbColumns)
|
||||
{
|
||||
if (item.IsPrimaryKey==true)
|
||||
{
|
||||
primaryKey = item.ColumnName;
|
||||
}
|
||||
}
|
||||
}
|
||||
return primaryKey;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
||||
#region DbTable
|
||||
public sealed class DbTable
|
||||
{
|
||||
public string TableName { get; set; }
|
||||
public string SchemaName { get; set; }
|
||||
public int Rows { get; set; }
|
||||
|
||||
public bool HasPrimaryKey { get; set; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region DbColumn
|
||||
|
||||
public sealed class DbColumn
|
||||
{
|
||||
|
||||
public int ColumnID { get; set; }
|
||||
|
||||
|
||||
public bool IsPrimaryKey { get; set; }
|
||||
|
||||
|
||||
public string ColumnName { get; set; }
|
||||
|
||||
|
||||
public string ColumnType { get; set; }
|
||||
|
||||
|
||||
public string CSharpType
|
||||
{
|
||||
get
|
||||
{
|
||||
return SqlServerDbTypeMap.MapCsharpType(ColumnType);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public Type CommonType
|
||||
{
|
||||
get
|
||||
{
|
||||
return SqlServerDbTypeMap.MapCommonType(ColumnType);
|
||||
}
|
||||
}
|
||||
|
||||
public int ByteLength { get; set; }
|
||||
|
||||
public int CharLength { get; set; }
|
||||
|
||||
public int Precision{get;set;}
|
||||
public int Scale { get; set; }
|
||||
|
||||
public bool IsIdentity { get; set; }
|
||||
|
||||
public bool IsNullable { get; set; }
|
||||
|
||||
public string Remark { get; set; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region SqlServerDbTypeMap
|
||||
|
||||
public class SqlServerDbTypeMap
|
||||
{
|
||||
public static string MapCsharpType(string dbtype)
|
||||
{
|
||||
if (string.IsNullOrEmpty(dbtype)) return dbtype;
|
||||
dbtype = dbtype.ToLower();
|
||||
string csharpType = "object";
|
||||
switch (dbtype)
|
||||
{
|
||||
case "bigint": csharpType = "long"; break;
|
||||
case "binary": csharpType = "byte[]"; break;
|
||||
case "bit": csharpType = "bool"; break;
|
||||
case "char": csharpType = "string"; break;
|
||||
case "date": csharpType = "DateTime"; break;
|
||||
case "datetime": csharpType = "DateTime"; break;
|
||||
case "datetime2": csharpType = "DateTime"; break;
|
||||
case "datetimeoffset": csharpType = "DateTimeOffset"; break;
|
||||
case "decimal": csharpType = "decimal"; break;
|
||||
case "float": csharpType = "double"; break;
|
||||
case "image": csharpType = "byte[]"; break;
|
||||
case "int": csharpType = "int"; break;
|
||||
case "money": csharpType = "decimal"; break;
|
||||
case "nchar": csharpType = "string"; break;
|
||||
case "ntext": csharpType = "string"; break;
|
||||
case "numeric": csharpType = "decimal"; break;
|
||||
case "nvarchar": csharpType = "string"; break;
|
||||
case "real": csharpType = "Single"; break;
|
||||
case "smalldatetime": csharpType = "DateTime"; break;
|
||||
case "smallint": csharpType = "short"; break;
|
||||
case "smallmoney": csharpType = "decimal"; break;
|
||||
case "sql_variant": csharpType = "object"; break;
|
||||
case "sysname": csharpType = "object"; break;
|
||||
case "text": csharpType = "string"; break;
|
||||
case "time": csharpType = "TimeSpan"; break;
|
||||
case "timestamp": csharpType = "byte[]"; break;
|
||||
case "tinyint": csharpType = "byte"; break;
|
||||
case "uniqueidentifier": csharpType = "Guid"; break;
|
||||
case "varbinary": csharpType = "byte[]"; break;
|
||||
case "varchar": csharpType = "string"; break;
|
||||
case "xml": csharpType = "string"; break;
|
||||
default: csharpType = "object"; break;
|
||||
}
|
||||
return csharpType;
|
||||
}
|
||||
|
||||
public static Type MapCommonType(string dbtype)
|
||||
{
|
||||
if (string.IsNullOrEmpty(dbtype)) return Type.Missing.GetType();
|
||||
dbtype = dbtype.ToLower();
|
||||
Type commonType = typeof(object);
|
||||
switch (dbtype)
|
||||
{
|
||||
case "bigint": commonType = typeof(long); break;
|
||||
case "binary": commonType = typeof(byte[]); break;
|
||||
case "bit": commonType = typeof(bool); break;
|
||||
case "char": commonType = typeof(string); break;
|
||||
case "date": commonType = typeof(DateTime); break;
|
||||
case "datetime": commonType = typeof(DateTime); break;
|
||||
case "datetime2": commonType = typeof(DateTime); break;
|
||||
case "datetimeoffset": commonType = typeof(DateTimeOffset); break;
|
||||
case "decimal": commonType = typeof(decimal); break;
|
||||
case "float": commonType = typeof(double); break;
|
||||
case "image": commonType = typeof(byte[]); break;
|
||||
case "int": commonType = typeof(int); break;
|
||||
case "money": commonType = typeof(decimal); break;
|
||||
case "nchar": commonType = typeof(string); break;
|
||||
case "ntext": commonType = typeof(string); break;
|
||||
case "numeric": commonType = typeof(decimal); break;
|
||||
case "nvarchar": commonType = typeof(string); break;
|
||||
case "real": commonType = typeof(Single); break;
|
||||
case "smalldatetime": commonType = typeof(DateTime); break;
|
||||
case "smallint": commonType = typeof(short); break;
|
||||
case "smallmoney": commonType = typeof(decimal); break;
|
||||
case "sql_variant": commonType = typeof(object); break;
|
||||
case "sysname": commonType = typeof(object); break;
|
||||
case "text": commonType = typeof(string); break;
|
||||
case "time": commonType = typeof(TimeSpan); break;
|
||||
case "timestamp": commonType = typeof(byte[]); break;
|
||||
case "tinyint": commonType = typeof(byte); break;
|
||||
case "uniqueidentifier": commonType = typeof(Guid); break;
|
||||
case "varbinary": commonType = typeof(byte[]); break;
|
||||
case "varchar": commonType = typeof(string); break;
|
||||
case "xml": commonType = typeof(string); break;
|
||||
default: commonType = typeof(object); break;
|
||||
}
|
||||
return commonType;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#>
|
|
@ -46,58 +46,12 @@
|
|||
<None Update="LiquidTemplate\IEntityService.liquid">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="TT_Template\IRaCIS .Core.ServiceAsync.tt">
|
||||
<LastGenOutput>IRaCIS .Core.ServiceAsync.cs</LastGenOutput>
|
||||
<Generator>TextTemplatingFileGenerator</Generator>
|
||||
</None>
|
||||
<None Update="TT_Template\IRaCIS .Core.IServiceAsync.tt">
|
||||
<LastGenOutput>IRaCIS .Core.IServiceAsync.cs</LastGenOutput>
|
||||
<Generator>TextTemplatingFileGenerator</Generator>
|
||||
</None>
|
||||
<None Update="TT_Template\IRaCIS.Core.Dto.tt">
|
||||
<Generator>TextTemplatingFileGenerator</Generator>
|
||||
<LastGenOutput>IRaCIS.Core.Dto.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Update="TT_Template\IRaCIS.Core.Entity.tt">
|
||||
<Generator>TextTemplatingFileGenerator</Generator>
|
||||
<LastGenOutput>IRaCIS.Core.Entity.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="TT_Template\IRaCIS .Core.IServiceAsync.cs">
|
||||
<DependentUpon>IRaCIS .Core.IServiceAsync.tt</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
</Compile>
|
||||
<Compile Update="TT_Template\IRaCIS .Core.ServiceAsync.cs">
|
||||
<DependentUpon>IRaCIS .Core.ServiceAsync.tt</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
</Compile>
|
||||
<Compile Update="TT_Template\IRaCIS.Core.Dto.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>IRaCIS.Core.Dto.tt</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="TT_Template\IRaCIS.Core.Entity.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>IRaCIS.Core.Entity.tt</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="TT_Template\Dto_New\" />
|
||||
<Folder Include="TT_Template\IServices_New\" />
|
||||
<Folder Include="TT_Template\Models_New\" />
|
||||
<Folder Include="TT_Template\Services_New\" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Fluid.Core" Version="2.11.1" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.8" />
|
||||
|
|
|
@ -1,115 +0,0 @@
|
|||
<#@ assembly name="System.Core"#>
|
||||
<#@ assembly name="Microsoft.VisualStudio.Interop"#>
|
||||
<#@ import namespace="System.Collections.Generic"#>
|
||||
<#@ import namespace="System.IO"#>
|
||||
<#@ import namespace="System.Text"#>
|
||||
<#@ import namespace="Microsoft.VisualStudio.TextTemplating"#>
|
||||
<#+
|
||||
class Manager
|
||||
{
|
||||
public struct Block {
|
||||
public int Start, Length;
|
||||
public String Name,OutputPath;
|
||||
}
|
||||
|
||||
public List<Block> blocks = new List<Block>();
|
||||
public Block currentBlock;
|
||||
public Block footerBlock = new Block();
|
||||
public Block headerBlock = new Block();
|
||||
public ITextTemplatingEngineHost host;
|
||||
public ManagementStrategy strategy;
|
||||
public StringBuilder template;
|
||||
public Manager(ITextTemplatingEngineHost host, StringBuilder template, bool commonHeader) {
|
||||
this.host = host;
|
||||
this.template = template;
|
||||
strategy = ManagementStrategy.Create(host);
|
||||
}
|
||||
public void StartBlock(String name,String outputPath) {
|
||||
currentBlock = new Block { Name = name, Start = template.Length ,OutputPath=outputPath};
|
||||
}
|
||||
|
||||
public void StartFooter() {
|
||||
footerBlock.Start = template.Length;
|
||||
}
|
||||
|
||||
public void EndFooter() {
|
||||
footerBlock.Length = template.Length - footerBlock.Start;
|
||||
}
|
||||
|
||||
public void StartHeader() {
|
||||
headerBlock.Start = template.Length;
|
||||
}
|
||||
|
||||
public void EndHeader() {
|
||||
headerBlock.Length = template.Length - headerBlock.Start;
|
||||
}
|
||||
|
||||
public void EndBlock() {
|
||||
currentBlock.Length = template.Length - currentBlock.Start;
|
||||
blocks.Add(currentBlock);
|
||||
}
|
||||
public void Process(bool split) {
|
||||
String header = template.ToString(headerBlock.Start, headerBlock.Length);
|
||||
String footer = template.ToString(footerBlock.Start, footerBlock.Length);
|
||||
blocks.Reverse();
|
||||
foreach(Block block in blocks) {
|
||||
String fileName = Path.Combine(block.OutputPath, block.Name);
|
||||
if (split) {
|
||||
String content = header + template.ToString(block.Start, block.Length) + footer;
|
||||
strategy.CreateFile(fileName, content);
|
||||
template.Remove(block.Start, block.Length);
|
||||
} else {
|
||||
strategy.DeleteFile(fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
class ManagementStrategy
|
||||
{
|
||||
internal static ManagementStrategy Create(ITextTemplatingEngineHost host) {
|
||||
return (host is IServiceProvider) ? new VSManagementStrategy(host) : new ManagementStrategy(host);
|
||||
}
|
||||
|
||||
internal ManagementStrategy(ITextTemplatingEngineHost host) { }
|
||||
|
||||
internal virtual void CreateFile(String fileName, String content) {
|
||||
File.WriteAllText(fileName, content);
|
||||
}
|
||||
|
||||
internal virtual void DeleteFile(String fileName) {
|
||||
if (File.Exists(fileName))
|
||||
File.Delete(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
class VSManagementStrategy : ManagementStrategy
|
||||
{
|
||||
private EnvDTE.ProjectItem templateProjectItem;
|
||||
|
||||
internal VSManagementStrategy(ITextTemplatingEngineHost host) : base(host) {
|
||||
IServiceProvider hostServiceProvider = (IServiceProvider)host;
|
||||
if (hostServiceProvider == null)
|
||||
throw new ArgumentNullException("Could not obtain hostServiceProvider");
|
||||
|
||||
EnvDTE.DTE dte = (EnvDTE.DTE)hostServiceProvider.GetCOMService(typeof(EnvDTE.DTE));
|
||||
if (dte == null)
|
||||
throw new ArgumentNullException("Could not obtain DTE from host");
|
||||
|
||||
templateProjectItem = dte.Solution.FindProjectItem(host.TemplateFile);
|
||||
}
|
||||
internal override void CreateFile(String fileName, String content) {
|
||||
base.CreateFile(fileName, content);
|
||||
//((EventHandler)delegate { templateProjectItem.ProjectItems.AddFromFile(fileName); }).BeginInvoke(null, null, null, null);
|
||||
}
|
||||
internal override void DeleteFile(String fileName) {
|
||||
((EventHandler)delegate { FindAndDeleteFile(fileName); }).BeginInvoke(null, null, null, null);
|
||||
}
|
||||
private void FindAndDeleteFile(String fileName) {
|
||||
foreach(EnvDTE.ProjectItem projectItem in templateProjectItem.ProjectItems) {
|
||||
if (projectItem.get_FileNames(0) == fileName) {
|
||||
projectItem.Delete();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}#>
|
|
@ -1,10 +0,0 @@
|
|||
|
||||
|
||||
//在这里设置 isPage 是否生成分页的还是不分页
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
<#@ template debug="false" hostspecific="true" language="C#" #>
|
||||
<#@ output extension=".cs" #>
|
||||
<#@ assembly name="System.Core.dll" #>
|
||||
<#@ assembly name="System.Data.dll" #>
|
||||
<#@ assembly name="System.Data.DataSetExtensions.dll" #>
|
||||
<#@ assembly name="System.Xml.dll" #>
|
||||
<#@ import namespace="System" #>
|
||||
<#@ import namespace="System.Xml" #>
|
||||
<#@ import namespace="System.Linq" #>
|
||||
<#@ import namespace="System.Data" #>
|
||||
<#@ import namespace="System.Data.SqlClient" #>
|
||||
<#@ import namespace="System.Collections.Generic" #>
|
||||
<#@ import namespace="System.IO" #>
|
||||
<#@ include file="$(ProjectDir)DbHelper.ttinclude" #>
|
||||
<#@ include file="$(ProjectDir)ModelAuto.ttinclude" #>
|
||||
<# var manager = new Manager(Host, GenerationEnvironment, true); #>
|
||||
|
||||
//在这里设置 isPage 是否生成分页的还是不分页
|
||||
|
||||
<#
|
||||
var isPage=true;
|
||||
#>
|
||||
|
||||
<#
|
||||
var OutputPath1 =Path.GetDirectoryName(Host.TemplateFile+"..");
|
||||
OutputPath1=Path.Combine(OutputPath1,"IServices_New");
|
||||
if (!Directory.Exists(OutputPath1))
|
||||
{
|
||||
Directory.CreateDirectory(OutputPath1);
|
||||
}
|
||||
#>
|
||||
|
||||
|
||||
<# foreach (var item in DbHelper.GetDbTablesNew(config.ConnectionString, config.DbDatabase,config.TableName))
|
||||
{
|
||||
var tableName=item.ToString();
|
||||
manager.StartBlock("I"+tableName+"Service"+".cs",OutputPath1);//文件名
|
||||
#>
|
||||
//--------------------------------------------------------------------
|
||||
// 此代码由T4模板自动生成 byzhouhang 20210918
|
||||
// 生成时间 <#=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")#>
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
using IRaCIS.Core.Application.ViewModel;
|
||||
namespace IRaCIS.Core.Application.Interfaces
|
||||
{
|
||||
/// <summary>
|
||||
/// I<#=tableName#>Service
|
||||
/// </summary>
|
||||
public interface I<#=tableName#>Service
|
||||
{
|
||||
|
||||
<# if(isPage){#>
|
||||
Task<PageOutput<<#=tableName#>View>> Get<#=tableName#>List(<#=tableName#>Query inQuery);
|
||||
<# } else {#>
|
||||
|
||||
Task<List<<#=tableName#>View>> Get<#=tableName#>List(<#=tableName#>Query inQuery);
|
||||
<# }#>
|
||||
|
||||
Task<IResponseOutput> AddOrUpdate<#=tableName#>(<#=tableName#>AddOrEdit addOrEdit<#=tableName#>);
|
||||
|
||||
Task<IResponseOutput> Delete<#=tableName#>(Guid <#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Id);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
<#
|
||||
manager.EndBlock();
|
||||
}
|
||||
manager.Process(true);
|
||||
#>
|
||||
|
||||
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
|
||||
|
||||
|
||||
|
||||
//在这里设置 isPage 是否生成分页的还是不分页
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,118 +0,0 @@
|
|||
<#@ template debug="false" hostspecific="true" language="C#" #>
|
||||
<#@ output extension=".cs" #>
|
||||
<#@ assembly name="System.Core.dll" #>
|
||||
<#@ assembly name="System.Data.dll" #>
|
||||
<#@ assembly name="System.Data.DataSetExtensions.dll" #>
|
||||
<#@ assembly name="System.Xml.dll" #>
|
||||
<#@ import namespace="System" #>
|
||||
<#@ import namespace="System.Xml" #>
|
||||
<#@ import namespace="System.Linq" #>
|
||||
<#@ import namespace="System.Data" #>
|
||||
<#@ import namespace="System.Data.SqlClient" #>
|
||||
<#@ import namespace="System.Collections.Generic" #>
|
||||
<#@ import namespace="System.IO" #>
|
||||
|
||||
<#@ include file="$(ProjectDir)DbHelper.ttinclude" #>
|
||||
<#@ include file="$(ProjectDir)ModelAuto.ttinclude" #>
|
||||
<# var manager = new Manager(Host, GenerationEnvironment, true); #>
|
||||
|
||||
|
||||
//在这里设置 isPage 是否生成分页的还是不分页
|
||||
|
||||
<#
|
||||
var isPage=true;
|
||||
#>
|
||||
|
||||
<#
|
||||
var OutputPath1 =Path.GetDirectoryName(Host.TemplateFile+"..");
|
||||
OutputPath1=Path.Combine(OutputPath1,"Services_New");
|
||||
if (!Directory.Exists(OutputPath1))
|
||||
{
|
||||
Directory.CreateDirectory(OutputPath1);
|
||||
}
|
||||
#>
|
||||
|
||||
|
||||
<# foreach (var item in DbHelper.GetDbTablesNew(config.ConnectionString, config.DbDatabase,config.TableName))
|
||||
{
|
||||
var tableName=item.ToString();
|
||||
manager.StartBlock(tableName+"Service"+".cs",OutputPath1);//文件名
|
||||
#>
|
||||
//--------------------------------------------------------------------
|
||||
// 此代码由T4模板自动生成 byzhouhang 20210918
|
||||
// 生成时间 <#=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")#>
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
using IRaCIS.Core.Domain.Models;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using IRaCIS.Core.Application.Interfaces;
|
||||
using IRaCIS.Core.Application.ViewModel;
|
||||
namespace IRaCIS.Core.Application.Service
|
||||
{
|
||||
/// <summary>
|
||||
/// <#=tableName#>Service
|
||||
/// </summary>
|
||||
[ ApiExplorerSettings(GroupName = "Test")]
|
||||
public class <#=tableName#>Service(IRepository<<#=tableName#>> _<#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Repository): BaseService, I<#=tableName#>Service
|
||||
{
|
||||
|
||||
<# if(isPage){#>
|
||||
[HttpPost]
|
||||
public async Task<PageOutput<<#=tableName#>View>> Get<#=tableName#>List(<#=tableName#>Query inQuery)
|
||||
{
|
||||
|
||||
var <#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Queryable =
|
||||
|
||||
_<#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Repository
|
||||
.ProjectTo<<#=tableName#>View>(_mapper.ConfigurationProvider);
|
||||
|
||||
var pageList= await <#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Queryable.ToPagedListAsync(inQuery);
|
||||
|
||||
return pageList;
|
||||
}
|
||||
<# } else {#>
|
||||
[HttpPost]
|
||||
public async Task<List<<#=tableName#>View>> Get<#=tableName#>List(<#=tableName#>Query inQuery)
|
||||
{
|
||||
|
||||
|
||||
var <#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Queryable = _<#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Repository
|
||||
.ProjectTo<<#=tableName#>View>(_mapper.ConfigurationProvider);
|
||||
|
||||
return await <#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Queryable.ToListAsync();
|
||||
}
|
||||
<# }#>
|
||||
|
||||
|
||||
public async Task<IResponseOutput> AddOrUpdate<#=tableName#>(<#=tableName#>AddOrEdit addOrEdit<#=tableName#>)
|
||||
{
|
||||
// 在此处拷贝automapper 映射
|
||||
|
||||
|
||||
CreateMap<<#=tableName#>, <#=tableName#>View>();
|
||||
// CreateMap< <#=tableName#>,<#=tableName#>AddOrEdit>().ReverseMap();
|
||||
|
||||
|
||||
var entity = await _<#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Repository.InsertOrUpdateAsync(addOrEdit<#=tableName#>, true);
|
||||
|
||||
return ResponseOutput.Ok(entity.Id.ToString());
|
||||
|
||||
}
|
||||
|
||||
|
||||
[HttpDelete("{<#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Id:guid}")]
|
||||
public async Task<IResponseOutput> Delete<#=tableName#>(Guid <#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Id)
|
||||
{
|
||||
var success = await _<#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Repository.DeleteFromQueryAsync(t => t.Id == <#=char.ToLower(tableName[0]) + tableName.Substring(1)#>Id,true);
|
||||
return ResponseOutput.Ok();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
<#
|
||||
manager.EndBlock();
|
||||
}
|
||||
manager.Process(true);
|
||||
#>
|
|
@ -1,8 +0,0 @@
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,86 +0,0 @@
|
|||
<#@ template debug="false" hostspecific="true" language="C#" #>
|
||||
<#@ output extension=".cs" #>
|
||||
<#@ assembly name="System.Core.dll" #>
|
||||
<#@ assembly name="System.Data.dll" #>
|
||||
<#@ assembly name="System.Data.DataSetExtensions.dll" #>
|
||||
<#@ assembly name="System.Xml.dll" #>
|
||||
<#@ import namespace="System" #>
|
||||
<#@ import namespace="System.Xml" #>
|
||||
<#@ import namespace="System.Linq" #>
|
||||
<#@ import namespace="System.Data" #>
|
||||
<#@ import namespace="System.Data.SqlClient" #>
|
||||
<#@ import namespace="System.Collections.Generic" #>
|
||||
<#@ import namespace="System.IO" #>
|
||||
<#@ include file="$(ProjectDir)DbHelper.ttinclude" #>
|
||||
<#@ include file="$(ProjectDir)ModelAuto.ttinclude" #>
|
||||
<# var manager = new Manager(Host, GenerationEnvironment, true); #>
|
||||
|
||||
|
||||
|
||||
<#
|
||||
var OutputPath1 =Path.GetDirectoryName(Host.TemplateFile+"..");
|
||||
OutputPath1=Path.Combine(OutputPath1,"Dto_New");
|
||||
if (!Directory.Exists(OutputPath1))
|
||||
{
|
||||
Directory.CreateDirectory(OutputPath1);
|
||||
}
|
||||
#>
|
||||
|
||||
|
||||
<# foreach (var item in DbHelper.GetDbTablesNew(config.ConnectionString, config.DbDatabase,config.TableName))
|
||||
{
|
||||
var tableName=item.ToString();
|
||||
manager.StartBlock(tableName+"ViewModel"+".cs",OutputPath1);//文件名
|
||||
#>
|
||||
//--------------------------------------------------------------------
|
||||
// 此代码由T4模板自动生成 byzhouhang 20210918
|
||||
// 生成时间 <#=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")#>
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||
//--------------------------------------------------------------------
|
||||
using System;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using System.Collections.Generic;
|
||||
namespace IRaCIS.Core.Application.ViewModel
|
||||
{
|
||||
<# var excludedColumns = new[] { "CreateUserId", "UpdateUserId", "CreateTime", "UpdateTime" };#>
|
||||
|
||||
/// <summary> <#=tableName#>View 列表视图 </summary>
|
||||
public class <#=tableName#>View:<#=tableName#>AddOrEdit
|
||||
{
|
||||
<# foreach(DbColumn column in DbHelper.GetDbColumns(config.ConnectionString, config.DbDatabase, tableName)){#>
|
||||
<# if (excludedColumns.Contains(column.ColumnName)){ #>
|
||||
public <#= column.CSharpType#><# if(column.CommonType.IsValueType && column.IsNullable){#>?<#}#> <#=column.ColumnName#> { get; set; }
|
||||
<# }#>
|
||||
<# }#>
|
||||
}
|
||||
|
||||
///<summary><#=tableName#>Query 列表查询参数</summary>
|
||||
public class <#=tableName#>Query
|
||||
{
|
||||
<# foreach(DbColumn column in DbHelper.GetDbColumns(config.ConnectionString, config.DbDatabase, tableName)){#><# if(column.CSharpType=="string"){#>
|
||||
public <#= column.CSharpType#><# if(column.CommonType.IsValueType && column.IsNullable){#>?<#}#> <#=column.ColumnName#> { get; set; }
|
||||
<# }#>
|
||||
<# }#>
|
||||
}
|
||||
|
||||
///<summary> <#=tableName#>AddOrEdit 添加编辑</summary>
|
||||
public class <#=tableName#>AddOrEdit
|
||||
{
|
||||
<# foreach(DbColumn column in DbHelper.GetDbColumns(config.ConnectionString, config.DbDatabase, tableName)){#>
|
||||
<# if (!excludedColumns.Contains(column.ColumnName)){ #>
|
||||
public <#= column.CSharpType#><# if(column.CommonType.IsValueType && column.IsNullable){#>?<#}#> <#=column.ColumnName#> { get; set; }
|
||||
<#}#>
|
||||
<# }#>
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
<#
|
||||
manager.EndBlock();
|
||||
}
|
||||
manager.Process(true);
|
||||
#>
|
||||
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
|
||||
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
<#@ template debug="false" hostspecific="true" language="C#" #>
|
||||
<#@ output extension=".cs" #>
|
||||
<#@ assembly name="System.Core.dll" #>
|
||||
<#@ assembly name="System.Data.dll" #>
|
||||
<#@ assembly name="System.Data.DataSetExtensions.dll" #>
|
||||
<#@ assembly name="System.Xml.dll" #>
|
||||
<#@ import namespace="System" #>
|
||||
<#@ import namespace="System.Xml" #>
|
||||
<#@ import namespace="System.Linq" #>
|
||||
<#@ import namespace="System.Data" #>
|
||||
<#@ import namespace="System.Data.SqlClient" #>
|
||||
<#@ import namespace="System.Collections.Generic" #>
|
||||
<#@ import namespace="System.IO" #>
|
||||
<#@ include file="$(ProjectDir)DbHelper.ttinclude" #>
|
||||
<#@ include file="$(ProjectDir)ModelAuto.ttinclude" #>
|
||||
<# var manager = new Manager(Host, GenerationEnvironment, true); #>
|
||||
|
||||
<#
|
||||
var OutputPath1 =Path.GetDirectoryName(Host.TemplateFile+"..");
|
||||
OutputPath1=Path.Combine(OutputPath1,"Models_New");
|
||||
if (!Directory.Exists(OutputPath1))
|
||||
{
|
||||
Directory.CreateDirectory(OutputPath1);
|
||||
}
|
||||
#>
|
||||
|
||||
<# foreach (var item in DbHelper.GetDbTablesNew(config.ConnectionString, config.DbDatabase,config.TableName))
|
||||
{
|
||||
var tableName=item.ToString();
|
||||
manager.StartBlock(tableName+".cs",OutputPath1);//文件名
|
||||
#>
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// 此代码由T4模板自动生成 byzhouhang 20210918
|
||||
// 生成时间 <#=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")#>
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||
using System;
|
||||
using IRaCIS.Core.Domain.Share;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.ComponentModel;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
namespace IRaCIS.Core.Domain.Models
|
||||
{
|
||||
|
||||
[Comment("<#=tableName#>")]
|
||||
[Table("<#=tableName#>")]
|
||||
public class <#=tableName#> : BaseFullAuditEntity
|
||||
{
|
||||
<# var excludedColumns = new[] { "CreateUserId", "Id", "UpdateUserId", "CreateTime", "UpdateTime", "DeleteUserId", "IsDeleted", "DeletedTime" };#>
|
||||
<# foreach(DbColumn column in DbHelper.GetDbColumns(config.ConnectionString, config.DbDatabase, tableName)){ #>
|
||||
<# if (!excludedColumns.Contains(column.ColumnName)){ #>
|
||||
[Comment("<#= column.Remark == "" ? "" : column.Remark.Replace("\r\n"," ") #>")]
|
||||
public <#= column.CSharpType#><# if(column.CommonType.IsValueType && column.IsNullable){#>?<#}#> <#=column.ColumnName#> { get; set; }
|
||||
<#}#>
|
||||
<#}#>
|
||||
}
|
||||
|
||||
public virtual DbSet<<#=tableName#>> <#=tableName#> { get; set; }
|
||||
}
|
||||
<#
|
||||
manager.EndBlock();
|
||||
}
|
||||
manager.Process(true);
|
||||
#>
|
|
@ -1,5 +1,5 @@
|
|||
优化背景:
|
||||
1、之前我们的从数据库自动生成实体对照模型,依赖于T4模板,同时T4模板里面的获取数据库表、列名的方法都是自己写的,其实没必要,官方有反向生成工具,也是用的T4模板,现在可以自定义了
|
||||
1、之前我们的从数据库自动生成实体对照模型,依赖于T4模板,同时T4模板里面的针对对应数据库获取信息的方法是自己写的,其实没必要,官方有反向生成工具,也是用的T4模板,现在可以自定义了
|
||||
2、如果我们想用pgsql orcal mysql,按照之前的方法就要针对这些数据库进行适配,太麻烦
|
||||
3、本身不同数据库官方提供了不同反向工程的库,利用命令行就可以根据数据库的定义生成实体
|
||||
Microsoft.EntityFrameworkCore.SqlServer mssql
|
||||
|
@ -26,10 +26,10 @@
|
|||
Scaffold-DbContext "连接字符串" 数据库提供程序包 -Project 项目名称 -OutputDir 输出目录 -Context "生成的上下文名称" -DataAnnotations -Tables 表1, 表2
|
||||
|
||||
方式1:
|
||||
Scaffold-DbContext "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true" Microsoft.EntityFrameworkCore.SqlServer -Project IRaCIS.Core.Test -OutputDir GenerateFolder -Context "TempContext" -DataAnnotations -Tables Dictionary, Site
|
||||
Scaffold-DbContext "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true" Microsoft.EntityFrameworkCore.SqlServer -Project IRaCIS.Core.Test -OutputDir GenerateContextModelFolder -Context "TempContext" -DataAnnotations -Tables Dictionary, Site
|
||||
|
||||
方式2: 多个表 -t Subject -t SubjectVisit
|
||||
dotnet ef dbcontext scaffold "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true" Microsoft.EntityFrameworkCore.SqlServer -p IRaCIS.Core.Test -d -o GenerateFolder -c "TempContext" -t Dictionary -t Site
|
||||
dotnet ef dbcontext scaffold "Server=106.14.89.110,1435;Database=Test_IRC;User ID=sa;Password=xc@123456;TrustServerCertificate=true" Microsoft.EntityFrameworkCore.SqlServer -p IRaCIS.Core.Test -d -o GenerateContextModelFolder -c "TempContext" -t Dictionary -t Site
|
||||
|
||||
|
||||
开发者PowerShell || 程序包管理控制台命令行 使用:
|
||||
|
@ -39,4 +39,6 @@ dotnet ef dbcontext scaffold "Server=106.14.89.110,1435;Database=Test_IRC;User I
|
|||
|
||||
自动脚本方便执行两句脚本:
|
||||
|
||||
./IRaCIS.Core.Test/AutoPowershell.ps1 -Tables Dictionary, Site
|
||||
./IRaCIS.Core.Test/AutoTemplatel.ps1 -Tables Dictionary, Site
|
||||
|
||||
如果不能执行ps1脚本,管理员设置:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
|
Loading…
Reference in New Issue