// --------------------------------------------------
		public static KMap<Region> CreateMapRegion( IKLink link )
		{
			var map = new KMap<Region>( link, x => x.Regions );
			map.UnManagedColumns( "ParentId" );

			map.CreateInstance = () => { return new Region(); };
			map.ClearInstance = obj => { obj.Clear(); };

			map.WriteRecord = ( obj, record ) => {
				DEBUG.IndentLine( "\n-- Map<Region>.WriteRecord() Instance = {0}", obj );
				map.BaseWriteRecord( obj, record );
				record.OnSet( "ParentId", () => { return obj.Parent == null ? null : obj.Parent.Id; } );
				DEBUG.Unindent();
			};
			map.LoadRecord = ( record, obj ) => {
				DEBUG.IndentLine( "\n-- Map<Region>.LoadRecord() Record = {0}", record );
				map.BaseLoadRecord( record, obj );
				record.OnGet( "ParentId", val => { obj.Parent = val == null ? null : map.Find( x => x.Id == val ); } );
				DEBUG.Unindent();
			};
			map.OnRefresh = obj => {
				DEBUG.IndentLine( "\n-- Map<Region>.OnRefresh() Instance = {0}", obj );
				obj = map.BaseOnRefresh( obj );
				obj.ChildRegions.Clear(); obj.ChildRegions.AddRange( link.Query<Region>().Where( x => x.ParentId == obj.Id ).ToList() );
				obj.Countries.Clear(); obj.Countries.AddRange( link.Query<Country>().Where( x => x.RegionId == obj.Id ).ToList() );
				DEBUG.Unindent(); return obj;
			};

			map.OnInsert = obj => {
				DEBUG.IndentLine( "\n-- Map<Region>.OnInsert() Instance = {0} ...", obj );
				obj.Parent = link.Sync( obj.Parent, KMaps.SyncReason.Insert );
				obj = map.BaseOnInsert( obj );
				link.Sync<Region>( obj.ChildRegions, KMaps.SyncReason.Insert );
				link.Sync<Country>( obj.Countries, KMaps.SyncReason.Insert );
				DEBUG.Unindent(); return obj;
			};
			map.OnUpdate = obj => {
				DEBUG.IndentLine( "\n-- Map<Region>.OnUpdate() Instance = {0} ...", obj );
				obj.Parent = link.Sync( obj.Parent, KMaps.SyncReason.Update );
				obj = map.BaseOnUpdate( obj );
				link.Sync<Region>( obj.ChildRegions, KMaps.SyncReason.Update );
				link.Sync<Country>( obj.Countries, KMaps.SyncReason.Update );
				DEBUG.Unindent(); return obj;
			};
			map.OnDelete = obj => {
				DEBUG.IndentLine( "\n-- Map<Region>.OnDelete() Instance = {0} ...", obj );
				link.Sync<Region>( obj.ChildRegions, KMaps.SyncReason.Delete );
				link.Sync<Country>( obj.Countries, KMaps.SyncReason.Delete );
				obj = map.BaseOnDelete( obj );
				DEBUG.Unindent(); return obj;
			};

			map.Validate(); return map;
		}