v9.7.2018.0421   支持运行时修改DAL连接字符串
大石头 编写于 2018-04-21 14:00:47
X
<#
if(Table.Relations!=null && Table.Relations.Count>0)
{
	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;

		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)){
#>
        /// <summary>该<#=Table.DisplayName#>所对应的<#=rtable.DisplayName#><#=rname.DisplayName#></summary>
        [XmlIgnore]
        public String <#=keyName#>Name { get { return <#=keyName#> != null ? <#=keyName#>.Name : null; } }
<#
			}
        }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{
// 加一个换行,避免没有扩展的时候生成的代码有问题
#>
<#}#>