T4Map
This commit is contained in:
		
							parent
							
								
									584bd0b185
								
							
						
					
					
						commit
						b030ef6ea1
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,386 +1,386 @@
 | 
			
		||||
<#@ template debug="false" hostspecific="true" language="C#" #>
 | 
			
		||||
<#@ assembly name="System.Core" #>
 | 
			
		||||
<#@ import namespace="System" #> 
 | 
			
		||||
<#@ import namespace="System.Linq" #>
 | 
			
		||||
<#@ import namespace="System.Text" #>
 | 
			
		||||
<#@ import namespace="System.IO" #>
 | 
			
		||||
<#@ import namespace="System.Collections.Generic" #> 
 | 
			
		||||
<#@ import namespace="System.Reflection" #> 
 | 
			
		||||
<#@ import namespace="System.ComponentModel" #>  
 | 
			
		||||
<#@ output extension=".cs" #>
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
//     T4模板类:基础Map类
 | 
			
		||||
//     此代码由T4模板自动生成
 | 
			
		||||
//     对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
using APT.Infrastructure.EF.Map;
 | 
			
		||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
 | 
			
		||||
 using Microsoft.EntityFrameworkCore;
 | 
			
		||||
 namespace APT.MS.Data.Mapping
 | 
			
		||||
 {
 | 
			
		||||
	<#
 | 
			
		||||
		List<string> dlls=new List<string>();
 | 
			
		||||
		List<string> filePaths=new List<string>();
 | 
			
		||||
		List<TableT4> tables = new List<TableT4>();
 | 
			
		||||
		 List<string> modules=new List<string> ();
 | 
			
		||||
 | 
			
		||||
		  dlls.Add(Host.ResolveAssemblyReference("$(SolutionDir)"+"APT.MS.Domain\\"));
 | 
			
		||||
	   dlls.Add(Host.ResolveAssemblyReference("$(SolutionDir)"+"APT.BaseData.Domain\\"));
 | 
			
		||||
 | 
			
		||||
	   foreach(var dll in dlls){
 | 
			
		||||
			GetFileName(filePaths,dll);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		foreach(var p in filePaths)
 | 
			
		||||
		{
 | 
			
		||||
			 var classText = File.ReadAllText(p, Encoding.UTF8);
 | 
			
		||||
 | 
			
		||||
            if (!string.IsNullOrEmpty(classText))
 | 
			
		||||
            {
 | 
			
		||||
                int classTextIndex = 0;
 | 
			
		||||
                var space = GetElement(classText, "namespace", "{", ref classTextIndex);
 | 
			
		||||
                if (!string.IsNullOrEmpty(space)&& space.IndexOf("Domain.Entities", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                {
 | 
			
		||||
                    var classEleTxt = GetElement(classText, string.Empty, ":", ref classTextIndex);
 | 
			
		||||
                     classTextIndex--;
 | 
			
		||||
                    var baseClassTxt=GetElement(classText, ":", "{", ref classTextIndex);
 | 
			
		||||
                    if (!string.IsNullOrEmpty(classEleTxt))
 | 
			
		||||
                    {
 | 
			
		||||
                        TableT4 tableT4 = new TableT4();
 | 
			
		||||
                        tableT4.TableNameSpace = space;
 | 
			
		||||
                        tableT4.BaseName = baseClassTxt;
 | 
			
		||||
                          tableT4.BaseEntityName="APTEntityBaseMap";
 | 
			
		||||
                        if(tableT4.BaseName.IndexOf("TreeEntityBase<")>-1){
 | 
			
		||||
                        tableT4.BaseEntityName="TreeEntityBaseMap";
 | 
			
		||||
                        }
 | 
			
		||||
                        tables.Add(tableT4);
 | 
			
		||||
                        int classEleTxtIndex = 0;
 | 
			
		||||
                        var attrTxt= GetElement(classEleTxt, "[", "]", ref classEleTxtIndex);
 | 
			
		||||
                        while (!string.IsNullOrEmpty(attrTxt))
 | 
			
		||||
                        {
 | 
			
		||||
                           if(attrTxt=="IgnoreT4")
 | 
			
		||||
                              {
 | 
			
		||||
                              tableT4.IgnoreT4=true;
 | 
			
		||||
                              }
 | 
			
		||||
                            tableT4.Attrs.Add(attrTxt);
 | 
			
		||||
                            attrTxt = GetElement(classEleTxt, "[", "]", ref classEleTxtIndex);
 | 
			
		||||
                        }
 | 
			
		||||
                        if(tableT4.IgnoreT4)
 | 
			
		||||
                            continue;
 | 
			
		||||
                        var classEleTxt1 =  GetElement(classEleTxt, "class", "", ref classEleTxtIndex);
 | 
			
		||||
                        if (!string.IsNullOrEmpty(classEleTxt1))
 | 
			
		||||
                            tableT4.Name = classEleTxt1;
 | 
			
		||||
                    
 | 
			
		||||
                        var fieldEleTxt = GetElement(classText, string.Empty, "get", ref classTextIndex);
 | 
			
		||||
                        while (!string.IsNullOrEmpty(fieldEleTxt))
 | 
			
		||||
                        {
 | 
			
		||||
                            var tempFieldEleTxt = fieldEleTxt;
 | 
			
		||||
                            var tempFieldEleIndex = 0;
 | 
			
		||||
 | 
			
		||||
                            FieldT4 fieldT4 = new FieldT4();
 | 
			
		||||
                            tableT4.Fields.Add(fieldT4);
 | 
			
		||||
 | 
			
		||||
                            var fieldAttrTxt = GetElement(tempFieldEleTxt, "[", "]", ref tempFieldEleIndex);
 | 
			
		||||
                            while (!string.IsNullOrEmpty(fieldAttrTxt))
 | 
			
		||||
                            {
 | 
			
		||||
                                fieldT4.Attrs.Add(fieldAttrTxt);
 | 
			
		||||
                                fieldAttrTxt = GetElement(tempFieldEleTxt, "[", "]", ref tempFieldEleIndex);
 | 
			
		||||
                            }
 | 
			
		||||
                            var fieldEleTxt1 = GetElement(tempFieldEleTxt, "public", "{", ref tempFieldEleIndex);
 | 
			
		||||
                            if (!string.IsNullOrEmpty(fieldEleTxt1))
 | 
			
		||||
                            {
 | 
			
		||||
                                var fieldEles=fieldEleTxt1.Split(new char[] { ' ' },StringSplitOptions.RemoveEmptyEntries);
 | 
			
		||||
                                if (fieldEles.Length > 0){
 | 
			
		||||
                                    fieldT4.Name = fieldEles[fieldEles.Length - 1];
 | 
			
		||||
									if (string.Compare(fieldEles[0], "String", true) == 0)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        if (!fieldT4.Attrs.Any(t => t.StartsWith("DataFieldLength")))
 | 
			
		||||
                                            fieldT4.Attrs.Add("DataFieldLength(500)");
 | 
			
		||||
                                    }
 | 
			
		||||
								}
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                            fieldEleTxt = GetElement(classText, "", "get", ref classTextIndex);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		foreach(var t4 in tables)
 | 
			
		||||
        { 
 | 
			
		||||
            if(t4.IgnoreT4) continue;
 | 
			
		||||
            var newName = t4.Name.ToLower();
 | 
			
		||||
            var newNameAry = newName.Split(new char[] { '_' }); 
 | 
			
		||||
            if (newNameAry.Any() && newNameAry.Length >= 2)
 | 
			
		||||
            {
 | 
			
		||||
                t4.ModuleName = newNameAry[1].ToUpper();
 | 
			
		||||
                for (var n = 2; n < newNameAry.Length; n++)
 | 
			
		||||
                {
 | 
			
		||||
                    t4.FixName += System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(newNameAry[n]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
			if(string.IsNullOrEmpty(t4.ModuleName)||string.IsNullOrEmpty(t4.FixName))continue;
 | 
			
		||||
			if(!modules.Any(i=>i==t4.TableNameSpace)){
 | 
			
		||||
				modules.Add(t4.TableNameSpace);
 | 
			
		||||
			}
 | 
			
		||||
            if (t4.Attrs.Any())
 | 
			
		||||
            {
 | 
			
		||||
                foreach(var classAttr in t4.Attrs)
 | 
			
		||||
                {
 | 
			
		||||
                    if (classAttr.IndexOf("DataClassIndex", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                    {
 | 
			
		||||
                        List<string> indexFields = new List<string>();
 | 
			
		||||
                        bool isUnique = false;
 | 
			
		||||
                        var p1 = GetAttrParam(classAttr);
 | 
			
		||||
                        int p1Index = 0;
 | 
			
		||||
                        var indexStr = GetElement(p1, "{", "}", ref p1Index);
 | 
			
		||||
                        if (!string.IsNullOrEmpty(indexStr))
 | 
			
		||||
                            indexFields.AddRange(indexStr.Split(new char[]{ ','}));
 | 
			
		||||
                        var unqStr = GetElement(p1, ",", "", ref p1Index);
 | 
			
		||||
                        isUnique = ToBoolean(unqStr);
 | 
			
		||||
                        if (indexFields.Any())
 | 
			
		||||
                            t4.MapDatas.Add("builder.HasIndex(" + (string.Join(",", indexFields)) + ")" + (isUnique ? ".IsUnique()" : "") + ";");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (t4.Fields.Any())
 | 
			
		||||
            {
 | 
			
		||||
                foreach(var f in t4.Fields)
 | 
			
		||||
                {
 | 
			
		||||
                    if (!f.Attrs.Any()) continue;
 | 
			
		||||
                    if (f.Attrs.Any(t => t.IndexOf("DataFieldIngore", StringComparison.OrdinalIgnoreCase) > -1))
 | 
			
		||||
                    {
 | 
			
		||||
                        t4.MapDatas.Add("builder.Ignore(t => t." + f.Name + ");");
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        foreach (var fAttr in f.Attrs)
 | 
			
		||||
                        {
 | 
			
		||||
                              
 | 
			
		||||
                            if (fAttr.IndexOf("DataFieldLength", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                            {
 | 
			
		||||
                                var p1 = GetAttrParams(fAttr);
 | 
			
		||||
                                if (p1 != null && p1.Any())
 | 
			
		||||
                                    t4.MapDatas.Add("builder.Property(t => t." + f.Name + ").HasMaxLength(" + p1[0] + ");");
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (fAttr.IndexOf("DataFieldIndex", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                            {
 | 
			
		||||
                                var p1 = GetAttrParams(fAttr);
 | 
			
		||||
                                bool isUnique = p1 != null && p1.Length > 0 ? ToBoolean(p1[0]) : false;
 | 
			
		||||
                                if(isUnique){
 | 
			
		||||
                                   string indexStr="builder.HasIndex(\""+ f.Name + "\"";
 | 
			
		||||
                                   for(var x=1;x<p1.Length;x++){
 | 
			
		||||
                                       var nextField=p1[x];
 | 
			
		||||
                                       indexStr+=",\""+nextField+"\"";
 | 
			
		||||
                                   }
 | 
			
		||||
                                   indexStr+=").IsUnique();";
 | 
			
		||||
                                   t4.MapDatas.Add(indexStr);
 | 
			
		||||
                                }else{
 | 
			
		||||
                                 t4.MapDatas.Add("builder.HasIndex(\""+ f.Name + "\");");
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (fAttr.IndexOf("DataFieldForeignKey", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                            {
 | 
			
		||||
                                var p1 = GetAttrParams(fAttr);
 | 
			
		||||
                                if(p1!=null&& p1.Length>0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    var nav = p1[0];
 | 
			
		||||
                                    var master = p1.Length > 1 ? p1[1] : string.Empty;
 | 
			
		||||
                                    var isOneOnOne=false;
 | 
			
		||||
                                    if(master=="true"||master=="false"){
 | 
			
		||||
                                        isOneOnOne=bool.Parse(master);
 | 
			
		||||
                                        master="";
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if(p1.Length>2){
 | 
			
		||||
                                     isOneOnOne=bool.Parse(p1[2]);
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if(!isOneOnOne)
 | 
			
		||||
                                    {
 | 
			
		||||
                                         t4.MapDatas.Add("builder.HasOne(t => t." + nav + ").WithMany(" + (string.IsNullOrEmpty(master) ? "" : ("t=>t." + master)) + ").HasForeignKey(t => t." + f.Name + ").OnDelete(DeleteBehavior.Restrict);");
 | 
			
		||||
                                    }
 | 
			
		||||
                                    else{
 | 
			
		||||
                                        t4.MapDatas.Add("builder.HasOne(t => t." + nav + ").WithOne(" + (string.IsNullOrEmpty(master) ? "" : ("t=>t." + master)) + ").HasForeignKey<"+t4.Name+">(t => t." + f.Name + ").OnDelete(DeleteBehavior.Restrict);");
 | 
			
		||||
                                    }
 | 
			
		||||
                                    
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (fAttr.IndexOf("UnionForeignKey", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                            {
 | 
			
		||||
                                var p1 = GetAttrParams(fAttr);
 | 
			
		||||
                                if(p1!=null&& p1.Length>0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    var forginkeys = p1[0].Split('|');
 | 
			
		||||
                                    var forginkey = $"t.{string.Join(",t.", forginkeys)}";
 | 
			
		||||
                                    var master = p1.Length > 1 ? p1[1] : string.Empty;
 | 
			
		||||
                                    t4.MapDatas.Add("builder.HasOne(t => t." + f.Name + ").WithMany(" + (string.IsNullOrEmpty(master) ? "" : ("t=>t." + master)) + ").HasForeignKey(t => new { " + forginkey + " });");
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (fAttr.IndexOf("DataFieldForeignKeyForMaster", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                            {
 | 
			
		||||
                                var p1 = GetAttrParams(fAttr);
 | 
			
		||||
                                if (p1 != null && p1.Length > 0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    var id = p1[0];
 | 
			
		||||
                                    var nav = p1.Length > 1 ? p1[1] : string.Empty;
 | 
			
		||||
                                   var isOneOnOne=false;
 | 
			
		||||
                                    if(nav=="true"||nav=="false"){
 | 
			
		||||
                                        isOneOnOne=bool.Parse(nav);
 | 
			
		||||
                                        nav="";
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if(p1.Length>2){
 | 
			
		||||
                                     isOneOnOne=bool.Parse(p1[2]);
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if(!isOneOnOne)
 | 
			
		||||
                                    t4.MapDatas.Add("builder.HasMany(t => t." + f.Name + ").WithOne(" + (string.IsNullOrEmpty(nav) ? "" : ("t=>t." + nav)) + ").HasForeignKey(t => t." + id+ ").OnDelete(DeleteBehavior.Restrict);");
 | 
			
		||||
                                    else
 | 
			
		||||
                                     t4.MapDatas.Add("builder.HasOne(t => t." + f.Name + ").WithOne(" + (string.IsNullOrEmpty(nav) ? "" : ("t=>t." + nav)) + ").HasForeignKey(t => t." + id+ ").OnDelete(DeleteBehavior.Restrict);");
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                            } 
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            } 
 | 
			
		||||
        }
 | 
			
		||||
		
 | 
			
		||||
		foreach(var space in modules)
 | 
			
		||||
		{
 | 
			
		||||
			WriteLine("using "+space +";");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		foreach(var t4 in tables)
 | 
			
		||||
		{
 | 
			
		||||
			if(string.IsNullOrEmpty(t4.ModuleName)||string.IsNullOrEmpty(t4.FixName)||t4.IgnoreT4)continue;
 | 
			
		||||
		#>
 | 
			
		||||
			#region  <#= t4.FixName#>
 | 
			
		||||
     public partial class <#= t4.ModuleName#><#= t4.FixName#>Map :<#=t4.BaseEntityName#><<#= t4.Name#>>
 | 
			
		||||
     {   
 | 
			
		||||
        public override void Configure(EntityTypeBuilder<<#= t4.Name#>> builder)
 | 
			
		||||
		{
 | 
			
		||||
			base.Configure(builder);
 | 
			
		||||
			<#
 | 
			
		||||
			if(t4.MapDatas.Any())
 | 
			
		||||
			{
 | 
			
		||||
				foreach(var d in t4.MapDatas)
 | 
			
		||||
					{
 | 
			
		||||
                           WriteLine(d);
 | 
			
		||||
					}
 | 
			
		||||
			}
 | 
			
		||||
			#>
 | 
			
		||||
		} 
 | 
			
		||||
     }
 | 
			
		||||
	 #endregion
 | 
			
		||||
		<#}
 | 
			
		||||
	#>
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
<#+  
 | 
			
		||||
 
 | 
			
		||||
  class TableT4
 | 
			
		||||
    {
 | 
			
		||||
        public string TableNameSpace { get; set; }
 | 
			
		||||
        public string ModuleName { get; set; }
 | 
			
		||||
        public string FixName { get; set; }
 | 
			
		||||
        public string Name { get; set; }
 | 
			
		||||
        public string BaseName { get; set; }
 | 
			
		||||
        public string BaseEntityName{get;set;}
 | 
			
		||||
        public bool IgnoreT4{get;set;}
 | 
			
		||||
        public List<FieldT4> Fields = new List<FieldT4>();
 | 
			
		||||
        public List<string> MapDatas = new List<string>();
 | 
			
		||||
        public List<string> Attrs = new List<string>();
 | 
			
		||||
        public TableT4()
 | 
			
		||||
        {
 | 
			
		||||
            MapDatas = new List<string>();
 | 
			
		||||
            Fields = new List<FieldT4>();
 | 
			
		||||
            Attrs = new List<string>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    class FieldT4
 | 
			
		||||
    {
 | 
			
		||||
        public FieldT4()
 | 
			
		||||
        {
 | 
			
		||||
            Attrs = new List<string>();
 | 
			
		||||
        }
 | 
			
		||||
        public string Name { get; set; }
 | 
			
		||||
        public List<string> Attrs = new List<string>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	private static string GetElement(string txt,string startStr,string endStr, ref int index)
 | 
			
		||||
        {
 | 
			
		||||
            var tempStartIndex=string.IsNullOrEmpty(startStr)?index:
 | 
			
		||||
                    txt.IndexOf(startStr, index, StringComparison.OrdinalIgnoreCase); 
 | 
			
		||||
            var tempEndIndex = string.IsNullOrEmpty(endStr) ? txt.Length : txt.IndexOf(endStr, index, StringComparison.OrdinalIgnoreCase);
 | 
			
		||||
            if (tempStartIndex != -1&&tempEndIndex!=-1)
 | 
			
		||||
            {
 | 
			
		||||
			 if (tempStartIndex > tempEndIndex)
 | 
			
		||||
                    tempEndIndex = string.IsNullOrEmpty(endStr) ? txt.Length :
 | 
			
		||||
                            txt.IndexOf(endStr, tempStartIndex , StringComparison.OrdinalIgnoreCase);
 | 
			
		||||
                var tempStartIndex1 = string.IsNullOrEmpty(startStr) ? -1 :
 | 
			
		||||
                        txt.IndexOf(startStr, tempStartIndex+1, StringComparison.OrdinalIgnoreCase);
 | 
			
		||||
                if (tempStartIndex1 != -1&&tempStartIndex1< tempEndIndex)
 | 
			
		||||
                    tempEndIndex = string.IsNullOrEmpty(endStr) ? txt.Length : 
 | 
			
		||||
                            txt.IndexOf(endStr, tempEndIndex+1, StringComparison.OrdinalIgnoreCase);
 | 
			
		||||
 | 
			
		||||
                int startStrLength = (string.IsNullOrEmpty(startStr) ? 0 : startStr.Length);
 | 
			
		||||
                int endStrLength = (string.IsNullOrEmpty(endStr) ? 0 : endStr.Length);
 | 
			
		||||
                index = tempEndIndex + endStrLength;
 | 
			
		||||
                string ret= txt.Substring(tempStartIndex+startStrLength, tempEndIndex-tempStartIndex- startStrLength);
 | 
			
		||||
                return ret.Trim();
 | 
			
		||||
            }
 | 
			
		||||
            return string.Empty;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private static string GetAttrParam(string str)
 | 
			
		||||
        {
 | 
			
		||||
            int lefIndex = str.IndexOf("(");
 | 
			
		||||
            int rigthIndex = str.LastIndexOf(")");
 | 
			
		||||
            if(lefIndex!=-1&&rigthIndex!=-1)
 | 
			
		||||
            {
 | 
			
		||||
                var ret= str.Substring(lefIndex + 1, rigthIndex - 1- lefIndex);
 | 
			
		||||
                return ret.Trim();
 | 
			
		||||
            }
 | 
			
		||||
            return string.Empty;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static string[] GetAttrParams(string str)
 | 
			
		||||
        {
 | 
			
		||||
            var ret = GetAttrParam(str);
 | 
			
		||||
            if (string.IsNullOrEmpty(ret)) return null; 
 | 
			
		||||
            return ret.Split(',').Select(t => t.Trim().Replace("\"", "")).ToArray();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static bool ToBoolean(string str)
 | 
			
		||||
        {
 | 
			
		||||
            if (string.IsNullOrEmpty(str)) return false;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                return Convert.ToBoolean(str);
 | 
			
		||||
            }catch{
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
public static void GetFileName(List<string> filePaths, string path)
 | 
			
		||||
 {
 | 
			
		||||
		DirectoryInfo root = new DirectoryInfo(path);
 | 
			
		||||
		foreach (FileInfo f in root.GetFiles())
 | 
			
		||||
		{
 | 
			
		||||
		  if (f.Extension.ToLower()==".cs".ToLower())
 | 
			
		||||
			{
 | 
			
		||||
				filePaths.Add(f.FullName);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		 foreach (DirectoryInfo d in root.GetDirectories())
 | 
			
		||||
		 {
 | 
			
		||||
		  GetFileName(filePaths, d.FullName);
 | 
			
		||||
		 }
 | 
			
		||||
 }
 | 
			
		||||
#>
 | 
			
		||||
<#@ template debug="false" hostspecific="true" language="C#" #>
 | 
			
		||||
<#@ assembly name="System.Core" #>
 | 
			
		||||
<#@ import namespace="System" #> 
 | 
			
		||||
<#@ import namespace="System.Linq" #>
 | 
			
		||||
<#@ import namespace="System.Text" #>
 | 
			
		||||
<#@ import namespace="System.IO" #>
 | 
			
		||||
<#@ import namespace="System.Collections.Generic" #> 
 | 
			
		||||
<#@ import namespace="System.Reflection" #> 
 | 
			
		||||
<#@ import namespace="System.ComponentModel" #>  
 | 
			
		||||
<#@ output extension=".cs" #>
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
//     T4模板类:基础Map类
 | 
			
		||||
//     此代码由T4模板自动生成
 | 
			
		||||
//     对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
 | 
			
		||||
//------------------------------------------------------------------------------
 | 
			
		||||
using APT.Infrastructure.EF.Map;
 | 
			
		||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
 | 
			
		||||
 using Microsoft.EntityFrameworkCore;
 | 
			
		||||
 namespace APT.MS.Data.Mapping
 | 
			
		||||
 {
 | 
			
		||||
	<#
 | 
			
		||||
		List<string> dlls=new List<string>();
 | 
			
		||||
		List<string> filePaths=new List<string>();
 | 
			
		||||
		List<TableT4> tables = new List<TableT4>();
 | 
			
		||||
		 List<string> modules=new List<string> ();
 | 
			
		||||
 | 
			
		||||
		  dlls.Add(Host.ResolveAssemblyReference("$(SolutionDir)"+"APT.MS.Domain\\"));
 | 
			
		||||
	   dlls.Add(Host.ResolveAssemblyReference("$(SolutionDir)"+"APT.BaseData.Domain\\"));
 | 
			
		||||
 | 
			
		||||
	   foreach(var dll in dlls){
 | 
			
		||||
			GetFileName(filePaths,dll);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		foreach(var p in filePaths)
 | 
			
		||||
		{
 | 
			
		||||
			 var classText = File.ReadAllText(p, Encoding.UTF8);
 | 
			
		||||
 | 
			
		||||
            if (!string.IsNullOrEmpty(classText))
 | 
			
		||||
            {
 | 
			
		||||
                int classTextIndex = 0;
 | 
			
		||||
                var space = GetElement(classText, "namespace", "{", ref classTextIndex);
 | 
			
		||||
                if (!string.IsNullOrEmpty(space)&& space.IndexOf("Domain.Entities", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                {
 | 
			
		||||
                    var classEleTxt = GetElement(classText, string.Empty, ":", ref classTextIndex);
 | 
			
		||||
                     classTextIndex--;
 | 
			
		||||
                    var baseClassTxt=GetElement(classText, ":", "{", ref classTextIndex);
 | 
			
		||||
                    if (!string.IsNullOrEmpty(classEleTxt))
 | 
			
		||||
                    {
 | 
			
		||||
                        TableT4 tableT4 = new TableT4();
 | 
			
		||||
                        tableT4.TableNameSpace = space;
 | 
			
		||||
                        tableT4.BaseName = baseClassTxt;
 | 
			
		||||
                          tableT4.BaseEntityName="APTEntityBaseMap";
 | 
			
		||||
                        if(tableT4.BaseName.IndexOf("TreeEntityBase<")>-1){
 | 
			
		||||
                        tableT4.BaseEntityName="TreeEntityBaseMap";
 | 
			
		||||
                        }
 | 
			
		||||
                        tables.Add(tableT4);
 | 
			
		||||
                        int classEleTxtIndex = 0;
 | 
			
		||||
                        var attrTxt= GetElement(classEleTxt, "[", "]", ref classEleTxtIndex);
 | 
			
		||||
                        while (!string.IsNullOrEmpty(attrTxt))
 | 
			
		||||
                        {
 | 
			
		||||
                           if(attrTxt=="IgnoreT4")
 | 
			
		||||
                              {
 | 
			
		||||
                              tableT4.IgnoreT4=true;
 | 
			
		||||
                              }
 | 
			
		||||
                            tableT4.Attrs.Add(attrTxt);
 | 
			
		||||
                            attrTxt = GetElement(classEleTxt, "[", "]", ref classEleTxtIndex);
 | 
			
		||||
                        }
 | 
			
		||||
                        if(tableT4.IgnoreT4)
 | 
			
		||||
                            continue;
 | 
			
		||||
                        var classEleTxt1 =  GetElement(classEleTxt, "class", "", ref classEleTxtIndex);
 | 
			
		||||
                        if (!string.IsNullOrEmpty(classEleTxt1))
 | 
			
		||||
                            tableT4.Name = classEleTxt1;
 | 
			
		||||
                    
 | 
			
		||||
                        var fieldEleTxt = GetElement(classText, string.Empty, "get", ref classTextIndex);
 | 
			
		||||
                        while (!string.IsNullOrEmpty(fieldEleTxt))
 | 
			
		||||
                        {
 | 
			
		||||
                            var tempFieldEleTxt = fieldEleTxt;
 | 
			
		||||
                            var tempFieldEleIndex = 0;
 | 
			
		||||
 | 
			
		||||
                            FieldT4 fieldT4 = new FieldT4();
 | 
			
		||||
                            tableT4.Fields.Add(fieldT4);
 | 
			
		||||
 | 
			
		||||
                            var fieldAttrTxt = GetElement(tempFieldEleTxt, "[", "]", ref tempFieldEleIndex);
 | 
			
		||||
                            while (!string.IsNullOrEmpty(fieldAttrTxt))
 | 
			
		||||
                            {
 | 
			
		||||
                                fieldT4.Attrs.Add(fieldAttrTxt);
 | 
			
		||||
                                fieldAttrTxt = GetElement(tempFieldEleTxt, "[", "]", ref tempFieldEleIndex);
 | 
			
		||||
                            }
 | 
			
		||||
                            var fieldEleTxt1 = GetElement(tempFieldEleTxt, "public", "{", ref tempFieldEleIndex);
 | 
			
		||||
                            if (!string.IsNullOrEmpty(fieldEleTxt1))
 | 
			
		||||
                            {
 | 
			
		||||
                                var fieldEles=fieldEleTxt1.Split(new char[] { ' ' },StringSplitOptions.RemoveEmptyEntries);
 | 
			
		||||
                                if (fieldEles.Length > 0){
 | 
			
		||||
                                    fieldT4.Name = fieldEles[fieldEles.Length - 1];
 | 
			
		||||
									if (string.Compare(fieldEles[0], "String", true) == 0)
 | 
			
		||||
                                    {
 | 
			
		||||
                                        if (!fieldT4.Attrs.Any(t => t.StartsWith("DataFieldLength")))
 | 
			
		||||
                                            fieldT4.Attrs.Add("DataFieldLength(500)");
 | 
			
		||||
                                    }
 | 
			
		||||
								}
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                            fieldEleTxt = GetElement(classText, "", "get", ref classTextIndex);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		foreach(var t4 in tables)
 | 
			
		||||
        { 
 | 
			
		||||
            if(t4.IgnoreT4) continue;
 | 
			
		||||
            var newName = t4.Name.ToLower();
 | 
			
		||||
            var newNameAry = newName.Split(new char[] { '_' }); 
 | 
			
		||||
            if (newNameAry.Any() && newNameAry.Length >= 2)
 | 
			
		||||
            {
 | 
			
		||||
                t4.ModuleName = newNameAry[1].ToUpper();
 | 
			
		||||
                for (var n = 2; n < newNameAry.Length; n++)
 | 
			
		||||
                {
 | 
			
		||||
                    t4.FixName += System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(newNameAry[n]);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
			if(string.IsNullOrEmpty(t4.ModuleName)||string.IsNullOrEmpty(t4.FixName))continue;
 | 
			
		||||
			if(!modules.Any(i=>i==t4.TableNameSpace)){
 | 
			
		||||
				modules.Add(t4.TableNameSpace);
 | 
			
		||||
			}
 | 
			
		||||
            if (t4.Attrs.Any())
 | 
			
		||||
            {
 | 
			
		||||
                foreach(var classAttr in t4.Attrs)
 | 
			
		||||
                {
 | 
			
		||||
                    if (classAttr.IndexOf("DataClassIndex", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                    {
 | 
			
		||||
                        List<string> indexFields = new List<string>();
 | 
			
		||||
                        bool isUnique = false;
 | 
			
		||||
                        var p1 = GetAttrParam(classAttr);
 | 
			
		||||
                        int p1Index = 0;
 | 
			
		||||
                        var indexStr = GetElement(p1, "{", "}", ref p1Index);
 | 
			
		||||
                        if (!string.IsNullOrEmpty(indexStr))
 | 
			
		||||
                            indexFields.AddRange(indexStr.Split(new char[]{ ','}));
 | 
			
		||||
                        var unqStr = GetElement(p1, ",", "", ref p1Index);
 | 
			
		||||
                        isUnique = ToBoolean(unqStr);
 | 
			
		||||
                        if (indexFields.Any())
 | 
			
		||||
                            t4.MapDatas.Add("builder.HasIndex(" + (string.Join(",", indexFields)) + ")" + (isUnique ? ".IsUnique()" : "") + ";");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (t4.Fields.Any())
 | 
			
		||||
            {
 | 
			
		||||
                foreach(var f in t4.Fields)
 | 
			
		||||
                {
 | 
			
		||||
                    if (!f.Attrs.Any()) continue;
 | 
			
		||||
                    if (f.Attrs.Any(t => t.IndexOf("DataFieldIngore", StringComparison.OrdinalIgnoreCase) > -1))
 | 
			
		||||
                    {
 | 
			
		||||
                        t4.MapDatas.Add("builder.Ignore(t => t." + f.Name + ");");
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        foreach (var fAttr in f.Attrs)
 | 
			
		||||
                        {
 | 
			
		||||
                              
 | 
			
		||||
                            if (fAttr.IndexOf("DataFieldLength", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                            {
 | 
			
		||||
                                var p1 = GetAttrParams(fAttr);
 | 
			
		||||
                                if (p1 != null && p1.Any())
 | 
			
		||||
                                    t4.MapDatas.Add("builder.Property(t => t." + f.Name + ").HasMaxLength(" + p1[0] + ");");
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (fAttr.IndexOf("DataFieldIndex", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                            {
 | 
			
		||||
                                var p1 = GetAttrParams(fAttr);
 | 
			
		||||
                                bool isUnique = p1 != null && p1.Length > 0 ? ToBoolean(p1[0]) : false;
 | 
			
		||||
                                if(isUnique){
 | 
			
		||||
                                   string indexStr="builder.HasIndex(\""+ f.Name + "\"";
 | 
			
		||||
                                   for(var x=1;x<p1.Length;x++){
 | 
			
		||||
                                       var nextField=p1[x];
 | 
			
		||||
                                       indexStr+=",\""+nextField+"\"";
 | 
			
		||||
                                   }
 | 
			
		||||
                                   indexStr+=").IsUnique();";
 | 
			
		||||
                                   t4.MapDatas.Add(indexStr);
 | 
			
		||||
                                }else{
 | 
			
		||||
                                 t4.MapDatas.Add("builder.HasIndex(\""+ f.Name + "\");");
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (fAttr.IndexOf("DataFieldForeignKey", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                            {
 | 
			
		||||
                                var p1 = GetAttrParams(fAttr);
 | 
			
		||||
                                if(p1!=null&& p1.Length>0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    var nav = p1[0];
 | 
			
		||||
                                    var master = p1.Length > 1 ? p1[1] : string.Empty;
 | 
			
		||||
                                    var isOneOnOne=false;
 | 
			
		||||
                                    if(master=="true"||master=="false"){
 | 
			
		||||
                                        isOneOnOne=bool.Parse(master);
 | 
			
		||||
                                        master="";
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if(p1.Length>2){
 | 
			
		||||
                                     isOneOnOne=bool.Parse(p1[2]);
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if(!isOneOnOne)
 | 
			
		||||
                                    {
 | 
			
		||||
                                         t4.MapDatas.Add("builder.HasOne(t => t." + nav + ").WithMany(" + (string.IsNullOrEmpty(master) ? "" : ("t=>t." + master)) + ").HasForeignKey(t => t." + f.Name + ").OnDelete(DeleteBehavior.Restrict);");
 | 
			
		||||
                                    }
 | 
			
		||||
                                    else{
 | 
			
		||||
                                        t4.MapDatas.Add("builder.HasOne(t => t." + nav + ").WithOne(" + (string.IsNullOrEmpty(master) ? "" : ("t=>t." + master)) + ").HasForeignKey<"+t4.Name+">(t => t." + f.Name + ").OnDelete(DeleteBehavior.Restrict);");
 | 
			
		||||
                                    }
 | 
			
		||||
                                    
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (fAttr.IndexOf("UnionForeignKey", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                            {
 | 
			
		||||
                                var p1 = GetAttrParams(fAttr);
 | 
			
		||||
                                if(p1!=null&& p1.Length>0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    var forginkeys = p1[0].Split('|');
 | 
			
		||||
                                    var forginkey = $"t.{string.Join(",t.", forginkeys)}";
 | 
			
		||||
                                    var master = p1.Length > 1 ? p1[1] : string.Empty;
 | 
			
		||||
                                    t4.MapDatas.Add("builder.HasOne(t => t." + f.Name + ").WithMany(" + (string.IsNullOrEmpty(master) ? "" : ("t=>t." + master)) + ").HasForeignKey(t => new { " + forginkey + " });");
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            else if (fAttr.IndexOf("DataFieldForeignKeyForMaster", StringComparison.OrdinalIgnoreCase) > -1)
 | 
			
		||||
                            {
 | 
			
		||||
                                var p1 = GetAttrParams(fAttr);
 | 
			
		||||
                                if (p1 != null && p1.Length > 0)
 | 
			
		||||
                                {
 | 
			
		||||
                                    var id = p1[0];
 | 
			
		||||
                                    var nav = p1.Length > 1 ? p1[1] : string.Empty;
 | 
			
		||||
                                   var isOneOnOne=false;
 | 
			
		||||
                                    if(nav=="true"||nav=="false"){
 | 
			
		||||
                                        isOneOnOne=bool.Parse(nav);
 | 
			
		||||
                                        nav="";
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if(p1.Length>2){
 | 
			
		||||
                                     isOneOnOne=bool.Parse(p1[2]);
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if(!isOneOnOne)
 | 
			
		||||
                                    t4.MapDatas.Add("builder.HasMany(t => t." + f.Name + ").WithOne(" + (string.IsNullOrEmpty(nav) ? "" : ("t=>t." + nav)) + ").HasForeignKey(t => t." + id+ ").OnDelete(DeleteBehavior.Restrict);");
 | 
			
		||||
                                    else
 | 
			
		||||
                                     t4.MapDatas.Add("builder.HasOne(t => t." + f.Name + ").WithOne(" + (string.IsNullOrEmpty(nav) ? "" : ("t=>t." + nav)) + ").HasForeignKey(t => t." + id+ ").OnDelete(DeleteBehavior.Restrict);");
 | 
			
		||||
                                }
 | 
			
		||||
 | 
			
		||||
                            } 
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            } 
 | 
			
		||||
        }
 | 
			
		||||
		
 | 
			
		||||
		foreach(var space in modules)
 | 
			
		||||
		{
 | 
			
		||||
			WriteLine("using "+space +";");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		foreach(var t4 in tables)
 | 
			
		||||
		{
 | 
			
		||||
			if(string.IsNullOrEmpty(t4.ModuleName)||string.IsNullOrEmpty(t4.FixName)||t4.IgnoreT4)continue;
 | 
			
		||||
		#>
 | 
			
		||||
			#region  <#= t4.FixName#>
 | 
			
		||||
     public partial class <#= t4.ModuleName#><#= t4.FixName#>Map :<#=t4.BaseEntityName#><<#= t4.Name#>>
 | 
			
		||||
     {   
 | 
			
		||||
        public override void Configure(EntityTypeBuilder<<#= t4.Name#>> builder)
 | 
			
		||||
		{
 | 
			
		||||
			base.Configure(builder);
 | 
			
		||||
			<#
 | 
			
		||||
			if(t4.MapDatas.Any())
 | 
			
		||||
			{
 | 
			
		||||
				foreach(var d in t4.MapDatas)
 | 
			
		||||
					{
 | 
			
		||||
                           WriteLine(d);
 | 
			
		||||
					}
 | 
			
		||||
			}
 | 
			
		||||
			#>
 | 
			
		||||
		} 
 | 
			
		||||
     }
 | 
			
		||||
	 #endregion
 | 
			
		||||
		<#}
 | 
			
		||||
	#>
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
<#+  
 | 
			
		||||
 
 | 
			
		||||
  class TableT4
 | 
			
		||||
    {
 | 
			
		||||
        public string TableNameSpace { get; set; }
 | 
			
		||||
        public string ModuleName { get; set; }
 | 
			
		||||
        public string FixName { get; set; }
 | 
			
		||||
        public string Name { get; set; }
 | 
			
		||||
        public string BaseName { get; set; }
 | 
			
		||||
        public string BaseEntityName{get;set;}
 | 
			
		||||
        public bool IgnoreT4{get;set;}
 | 
			
		||||
        public List<FieldT4> Fields = new List<FieldT4>();
 | 
			
		||||
        public List<string> MapDatas = new List<string>();
 | 
			
		||||
        public List<string> Attrs = new List<string>();
 | 
			
		||||
        public TableT4()
 | 
			
		||||
        {
 | 
			
		||||
            MapDatas = new List<string>();
 | 
			
		||||
            Fields = new List<FieldT4>();
 | 
			
		||||
            Attrs = new List<string>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    class FieldT4
 | 
			
		||||
    {
 | 
			
		||||
        public FieldT4()
 | 
			
		||||
        {
 | 
			
		||||
            Attrs = new List<string>();
 | 
			
		||||
        }
 | 
			
		||||
        public string Name { get; set; }
 | 
			
		||||
        public List<string> Attrs = new List<string>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	private static string GetElement(string txt,string startStr,string endStr, ref int index)
 | 
			
		||||
        {
 | 
			
		||||
            var tempStartIndex=string.IsNullOrEmpty(startStr)?index:
 | 
			
		||||
                    txt.IndexOf(startStr, index, StringComparison.OrdinalIgnoreCase); 
 | 
			
		||||
            var tempEndIndex = string.IsNullOrEmpty(endStr) ? txt.Length : txt.IndexOf(endStr, index, StringComparison.OrdinalIgnoreCase);
 | 
			
		||||
            if (tempStartIndex != -1&&tempEndIndex!=-1)
 | 
			
		||||
            {
 | 
			
		||||
			 if (tempStartIndex > tempEndIndex)
 | 
			
		||||
                    tempEndIndex = string.IsNullOrEmpty(endStr) ? txt.Length :
 | 
			
		||||
                            txt.IndexOf(endStr, tempStartIndex , StringComparison.OrdinalIgnoreCase);
 | 
			
		||||
                var tempStartIndex1 = string.IsNullOrEmpty(startStr) ? -1 :
 | 
			
		||||
                        txt.IndexOf(startStr, tempStartIndex+1, StringComparison.OrdinalIgnoreCase);
 | 
			
		||||
                if (tempStartIndex1 != -1&&tempStartIndex1< tempEndIndex)
 | 
			
		||||
                    tempEndIndex = string.IsNullOrEmpty(endStr) ? txt.Length : 
 | 
			
		||||
                            txt.IndexOf(endStr, tempEndIndex+1, StringComparison.OrdinalIgnoreCase);
 | 
			
		||||
 | 
			
		||||
                int startStrLength = (string.IsNullOrEmpty(startStr) ? 0 : startStr.Length);
 | 
			
		||||
                int endStrLength = (string.IsNullOrEmpty(endStr) ? 0 : endStr.Length);
 | 
			
		||||
                index = tempEndIndex + endStrLength;
 | 
			
		||||
                string ret= txt.Substring(tempStartIndex+startStrLength, tempEndIndex-tempStartIndex- startStrLength);
 | 
			
		||||
                return ret.Trim();
 | 
			
		||||
            }
 | 
			
		||||
            return string.Empty;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private static string GetAttrParam(string str)
 | 
			
		||||
        {
 | 
			
		||||
            int lefIndex = str.IndexOf("(");
 | 
			
		||||
            int rigthIndex = str.LastIndexOf(")");
 | 
			
		||||
            if(lefIndex!=-1&&rigthIndex!=-1)
 | 
			
		||||
            {
 | 
			
		||||
                var ret= str.Substring(lefIndex + 1, rigthIndex - 1- lefIndex);
 | 
			
		||||
                return ret.Trim();
 | 
			
		||||
            }
 | 
			
		||||
            return string.Empty;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static string[] GetAttrParams(string str)
 | 
			
		||||
        {
 | 
			
		||||
            var ret = GetAttrParam(str);
 | 
			
		||||
            if (string.IsNullOrEmpty(ret)) return null; 
 | 
			
		||||
            return ret.Split(',').Select(t => t.Trim().Replace("\"", "")).ToArray();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static bool ToBoolean(string str)
 | 
			
		||||
        {
 | 
			
		||||
            if (string.IsNullOrEmpty(str)) return false;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                return Convert.ToBoolean(str);
 | 
			
		||||
            }catch{
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
public static void GetFileName(List<string> filePaths, string path)
 | 
			
		||||
 {
 | 
			
		||||
		DirectoryInfo root = new DirectoryInfo(path);
 | 
			
		||||
		foreach (FileInfo f in root.GetFiles())
 | 
			
		||||
		{
 | 
			
		||||
		  if (f.Extension.ToLower()==".cs".ToLower())
 | 
			
		||||
			{
 | 
			
		||||
				filePaths.Add(f.FullName);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		 foreach (DirectoryInfo d in root.GetDirectories())
 | 
			
		||||
		 {
 | 
			
		||||
		  GetFileName(filePaths, d.FullName);
 | 
			
		||||
		 }
 | 
			
		||||
 }
 | 
			
		||||
#>
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user