v9.7.2018.0421   支持运行时修改DAL连接字符串
大石头 编写于 2018-04-21 14:00:47
X
<#
// 根据索引,增加多个方法
if(Table.Indexes!=null&&Table.Indexes.Count>0){
    foreach (IDataIndex di in Table.Indexes){
        if(di.Columns==null||di.Columns.Length<1)continue;

        IDataColumn[] columns=Table.GetColumns(di.Columns);
        if(columns==null||columns.Length<1)continue;

        String returnType=myClassName;
        String action="Find";
        String IsAll=String.Empty;
        if (!di.Unique){
            returnType=String.Format("IList<{0}>",myClassName);
            IsAll="All";
            action="FindAll";
        }
        StringBuilder sb1=new StringBuilder();
        StringBuilder sb2=new StringBuilder();
        StringBuilder sb3=new StringBuilder();
        StringBuilder sb4=new StringBuilder();
        StringBuilder sb5=new StringBuilder();
        String[] Args=new String[columns.Length];

        for(int i=0;i<columns.Length;i++)
        {
            IDataColumn Field=columns[i];

            if(sb1.Length>0) sb1.Append(", ");
            sb1.Append(Field.DataType.Name+" ");
            String argName=Field.Name.ToLower();
            if(argName==Field.Name) argName="__"+Field.Name;
            sb1.Append(argName);
            Args[i]=argName;
   
            if(sb2.Length>0) sb2.Append(", ");
            sb2.Append("__."+Field.Name);
            
            if(sb3.Length>0) sb3.Append(", ");
            sb3.Append(argName);
            
            if(sb4.Length>0) sb4.Append("And");
            sb4.Append(Field.Name);
            
            if(sb5.Length>0) sb5.Append("、");
            if(!String.IsNullOrEmpty(Field.Description))
                sb5.Append(Field.Description);
            else
                sb5.Append(Field.Name);
        }
#>
        /// <summary>根据<#=sb5#>查找</summary><#
        for(int i=0;i<columns.Length;i++)
        {
#>
        /// <param name="<#=Args[i]#>"><#=columns[i].Description#></param><#  
        }
#>
        /// <returns></returns>
        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public static <#=returnType#> Find<#=IsAll#>By<#=sb4#>(<#=sb1#>)
        {<#if(columns.Length>1){#>
            if (Meta.Count >= 1000)
                return <#=action#>(new String[] { <#=sb2#> }, new Object[] { <#=sb3#> });
            else // 实体缓存
                return Meta.Cache.FindAll(e => <#for(int i=0;i<columns.Length;i++){if(i>0)Write(" && ");#>e.<#=columns[i].Name#> == <#=Args[i]#><#}#>);<#
        }else{
            String pname=columns[0].Name;
    #>
            if (Meta.Count >= 1000)
                return <#=action#>(__.<#=pname#>, <#=Args[0]#>);
            else // 实体缓存
                return Meta.Cache.Find(e => e.<#=pname#> == <#=Args[0]#>);<#if(di.Unique){#>
            // 单对象缓存
            //return Meta.SingleCache[<#=Args[0]#>];<#}}#>
        }
<#
    }
}else{
// 加一个换行,避免没有扩展的时候生成的代码有问题
#>
<#}#>