public void AddDataTableRelation(DataTableRelation relation)
 {
     if (relation == null)
     {
         throw new ArgumentNullException("relation");
     }
     if (!this.backendDataTableRelations.Contains(relation))
     {
         if (relation.DataTableLoaderSet != null && relation.DataTableLoaderSet != this)
         {
             throw new InvalidOperationException(string.Format("the relation '{0}' has been added into anoter DataTableLoaderSet.", relation.RelationName));
         }
         this.backendDataTableRelations.Add(relation);
         relation.DataTableLoaderSet = this;
     }
 }
        public DataTableLoader GetRefreshableSource(string dataMember)
        {
            DataTableLoader dataTableLoader = this.GetDataTableLoader(dataMember);

            if (dataTableLoader == null)
            {
                DataTableRelation dataTableRelation = this.GetDataTableRelation(dataMember);
                if (dataTableRelation != null)
                {
                    if (dataTableRelation.ParentDataTableLoaderConfiguration.DataTableLoader == null)
                    {
                        this.CreateDataTableLoader(dataTableRelation.ParentDataTableLoaderConfiguration);
                    }
                    if (dataTableRelation.ChildDataTableLoaderConfiguration.DataTableLoader == null)
                    {
                        this.CreateDataTableLoader(dataTableRelation.ChildDataTableLoaderConfiguration);
                    }
                    dataTableLoader = dataTableRelation.ChildDataTableLoaderConfiguration.DataTableLoader;
                }
            }
            return(dataTableLoader);
        }