v9.7.2018.0421   支持运行时修改DAL连接字符串
大石头 编写于 2018-04-21 14:00:47
X
<#
if(Table.Relations!=null && Table.Relations.Count>0)
{
    List<String> tbs=new List<String>();
    foreach(IDataRelation dr in Table.Relations)
    {
        IDataTable rtable = FindTable(dr.RelationTable);
        if (rtable == null) continue;

        IDataColumn rcolumn = rtable.GetColumn(dr.RelationColumn);
        if(rcolumn == null) continue;

        IDataColumn field = Table.GetColumn(dr.Column);

        String className = rtable.Name;
        String keyName=className;
        if(tbs.Contains(keyName)) continue;
        tbs.Add(keyName);

        Boolean b=dr.Unique;
        // 如果是唯一的,应该判断对方的唯一性,如果对方也是唯一,那么就构成一对一
        if(b&&rtable.Relations!=null)
        {
            foreach(IDataRelation dr2 in rtable.Relations)
            {
                if(dr2.Column==dr.RelationColumn && dr2.RelationTable==Table.TableName && dr2.RelationColumn==dr.Column)
                {
                    if(dr2.Unique) b=false;
                }
            }
        }

        if(!b)
        {
#>
        [NonSerialized]
        private <#=className#> _<#=keyName#>;
        /// <summary>该<#=Table.DisplayName#>所对应的<#=rtable.DisplayName#></summary>
        [XmlIgnore]
        public <#=className#> <#=keyName#>
        {
            get
            {
                <#
                if(field.DataType == typeof(String)){
                #>if (_<#=keyName#> == null && !String.IsNullOrEmpty(<#=field.Name#>) && !Dirtys.ContainsKey("<#=keyName#>"))<#
                }else{#>if (_<#=keyName#> == null && <#=field.Name#> > 0 && !Dirtys.ContainsKey("<#=keyName#>"))<#
                }#>
                {
                    _<#=keyName#> = <#=className#>.FindBy<#=rcolumn.Name#>(<#=field.Name#>);
                    Dirtys["<#=keyName#>"] = true;
                }
                return _<#=keyName#>;
            }
            set { _<#=keyName#> = value; }
        }
<#
            // 如果对方有名为Name的字符串字段,则加一个扩展属性
            IDataColumn rname=rtable.GetColumn("Name");
            if(rname!=null&&rname.DataType==typeof(String)&&Table.GetColumn(keyName+"Name")==null){
#>
        /// <summary>该<#=Table.DisplayName#>所对应的<#=rtable.DisplayName#><#=rname.DisplayName#></summary>
        [XmlIgnore]
        public String <#=keyName#>Name { get { return <#=keyName#> != null ? <#=keyName#>.Name : String.Empty; } }
<#
            }
        }else
        {
            keyName+="s";
#>
        [NonSerialized]
        private EntityList<<#=className#>> _<#=keyName#>;
        /// <summary>该<#=Table.DisplayName#>所拥有的<#=rtable.DisplayName#>集合</summary>
        [XmlIgnore]
        public EntityList<<#=className#>> <#=keyName#>
        {
            get
            {
                <#
                if(field.DataType == typeof(String)){
                #>if (_<#=keyName#> == null && !String.IsNullOrEmpty(<#=field.Name#>) && !Dirtys.ContainsKey("<#=keyName#>"))<#
                }else{#>if (_<#=keyName#> == null && <#=field.Name#> > 0 && !Dirtys.ContainsKey("<#=keyName#>"))<#
                }#>
                {
                    _<#=keyName#> = <#=className#>.FindAllBy<#=rcolumn.Name#>(<#=field.Name#>);
                    Dirtys["<#=keyName#>"] = true;
                }
                return _<#=keyName#>;
            }
            set { _<#=keyName#> = value; }
        }
<#
        }
    }
}else{
// 加一个换行,避免没有扩展的时候生成的代码有问题
#>
<#}#>