5103 lines
		
	
	
		
			163 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			5103 lines
		
	
	
		
			163 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
##|TYPE Template
 | 
						|
##|UNIQUEID ce9c6b98-62fe-4a36-9a31-cd33b283f574
 | 
						|
##|TITLE CSLA Business Objects
 | 
						|
##|NAMESPACE CSLA_21
 | 
						|
##|SOURCE_TYPE Source
 | 
						|
##|OUTPUT_LANGUAGE C#
 | 
						|
##|GUI_ENGINE .Net Script
 | 
						|
##|GUI_LANGUAGE C#
 | 
						|
##|GUI_BEGIN
 | 
						|
<%#NAMESPACE System, System.Text, System.Collections, Zeus, Zeus.UserInterface, Zeus.DotNetScript %>
 | 
						|
 | 
						|
public class GeneratedGui : DotNetScriptGui
 | 
						|
{
 | 
						|
	public GeneratedGui( ZeusGuiContext context ) : base( context ) {}
 | 
						|
	private bool bInitializing=false;
 | 
						|
	public override void Setup()
 | 
						|
	{
 | 
						|
		bInitializing = true;
 | 
						|
		if ( !input.Contains( "chooseTables" ) || !input.Contains( "txtPath" ) ||
 | 
						|
				( !input.Contains( "chkClass" ) && !input.Contains( "chkNaming" ) ) )
 | 
						|
		{
 | 
						|
			if(context.Objects.ContainsKey("DnpUtils"))DnpUtils.ReadInputFromCache(context);
 | 
						|
			ui.Title = "CSLA Object Mapping";
 | 
						|
			ui.Width = 600;
 | 
						|
			ui.Height = 660;
 | 
						|
	
 | 
						|
			// Grab default output path
 | 
						|
			string sOutputPath = "";
 | 
						|
			
 | 
						|
			if( input.Contains( "defaultOutputPath" ) ) 
 | 
						|
			{
 | 
						|
				sOutputPath = input["defaultOutputPath"].ToString();
 | 
						|
			}
 | 
						|
			//int top=0;
 | 
						|
			// Setup Folder selection input control.
 | 
						|
			GuiLabel label1 = ui.AddLabel( "label1", "Select the output path:", "Select the output path in the field below." );
 | 
						|
			label1.Width = 200;
 | 
						|
			GuiTextBox outputPath = ui.AddTextBox( "outputPath", sOutputPath, "Select the Output Path." );
 | 
						|
			outputPath.Width = 450;
 | 
						|
			GuiFilePicker selectPath = ui.AddFilePicker( "selectPath", "Select Path", "Select the Output Path.", "outputPath", true );
 | 
						|
			selectPath.Top = outputPath.Top;
 | 
						|
			selectPath.Width = 100;
 | 
						|
			selectPath.Left = outputPath.Left + outputPath.Width + 20;
 | 
						|
			
 | 
						|
			// Setup Database selection combobox.
 | 
						|
			GuiLabel label4 = ui.AddLabel( "label4", "Select a database:", "Select a database in the dropdown below." );
 | 
						|
			label4.Width = 250;
 | 
						|
			GuiComboBox chooseDatabase = ui.AddComboBox( "chooseDatabase", "Select a database." );
 | 
						|
			chooseDatabase.Width = 250;
 | 
						|
			// Namespace
 | 
						|
			GuiLabel label2 = ui.AddLabel( "label2", "Namespace: ",  "Provide your objects namespace." );
 | 
						|
			label2.Width = 280;
 | 
						|
			GuiTextBox classNamespace = ui.AddTextBox( "classNamespace", "VEPROMS.CSLA.Library", "Provide your objects namespace." );				
 | 
						|
			classNamespace.Width = 280;
 | 
						|
			
 | 
						|
						GuiLabel label3 = ui.AddLabel( "label3", "Member prefix: ", "Provide your Prefix." );
 | 
						|
			label3.Width = 100;
 | 
						|
			label3.Top = label2.Top;
 | 
						|
			label3.Left = label2.Width + 20;
 | 
						|
			GuiTextBox memberPrefix = ui.AddTextBox( "memberPrefix", "_", "" );
 | 
						|
			memberPrefix.Width = 100;
 | 
						|
			memberPrefix.Top = classNamespace.Top;
 | 
						|
			memberPrefix.Left = classNamespace.Width + 20;
 | 
						|
					 
 | 
						|
			GuiLabel label3A = ui.AddLabel( "label3A", "dbConnection: ", "Provide a Connection." );
 | 
						|
			label3A.Width = 150;
 | 
						|
			label3A.Top = label3.Top;
 | 
						|
			label3A.Left = label3.Left+label3.Width + 10;
 | 
						|
			GuiTextBox dbConnection = ui.AddTextBox( "dbConnection", "VEPROMS", "" );
 | 
						|
			dbConnection.Width = 150;
 | 
						|
			dbConnection.Top = memberPrefix.Top;
 | 
						|
			dbConnection.Left = memberPrefix.Left + memberPrefix.Width + 10;
 | 
						|
			GuiCheckBox chkGenerateMain = MakeGuiCheckBox( "chkGenerateMain", "Main", true, "Create Main Object",100 );
 | 
						|
			GuiCheckBox chkFKList = MakeGuiCheckBox( "chkFKList", "FK List", true, "Create FK List Object" ,70,chkGenerateMain,100,0);
 | 
						|
			GuiCheckBox chkFKItem = MakeGuiCheckBox( "chkFKItem", "FK Item", true, "Create FK Item Object" ,70,chkFKList,0,-1);
 | 
						|
			GuiCheckBox chkInfoList = MakeGuiCheckBox( "chkInfoList", "Info List", true, "Create FK Info List Object" ,70,chkFKItem,0,-1);
 | 
						|
			GuiCheckBox chkInfo = MakeGuiCheckBox( "chkInfo", "Info", true, "Create Info Object" ,70,chkInfoList,0,-1);
 | 
						|
			GuiCheckBox chkPartBM = MakeGuiCheckBox("chkPartBM","Business Methods",true,"Create Business Methods",130,chkGenerateMain,170,0);
 | 
						|
			GuiCheckBox chkPartDA = MakeGuiCheckBox("chkPartDA","Data Access",true,"Create Data Access",130,chkGenerateMain,300,0);
 | 
						|
			GuiCheckBox chkPartVR = MakeGuiCheckBox("chkPartVR","Validation Rules",true,"Create Validation Rules",130,chkPartBM,0,-1);
 | 
						|
			GuiCheckBox chkPartEX = MakeGuiCheckBox("chkPartEX","Exists",true,"Create Exists",130,chkPartDA,0,-1);
 | 
						|
			GuiCheckBox chkPartAR = MakeGuiCheckBox("chkPartAR","Authorization Rules",true,"Create Authorization Rules",130,chkPartVR,0,-1);
 | 
						|
			GuiCheckBox chkPartDF = MakeGuiCheckBox("chkPartDF","Defaults",true,"Create Defaults",130,chkPartEX,0,-1);
 | 
						|
			GuiCheckBox chkPartFM = MakeGuiCheckBox("chkPartFM","Factory Methods",true,"Create Factory Methods",130,chkPartAR,0,-1);
 | 
						|
			GuiCheckBox chkPartCM = MakeGuiCheckBox("chkPartCM","Component Model",true,"Create Component Model Interface",130,chkGenerateMain,430,0);
 | 
						|
			GuiCheckBox chkPartL4N = MakeGuiCheckBox("chkPartL4N","Log4Net",true,"Create Log4Net Code",130,chkPartCM,0,-1);
 | 
						|
			GuiCheckBox chkVolian = MakeGuiCheckBox("chkVolian","Volian Header",true,"Add Header",130,chkPartL4N,0,-1);
 | 
						|
			GuiCheckBox chkDatabase = MakeGuiCheckBox("chkDatabase","Database.cs",true,"Create Database Object",130,chkGenerateMain,0,50);
 | 
						|
			GuiCheckBox chkPartEXT = MakeGuiCheckBox("chkPartEXT","Extension Sample",true,"Create Extensions",130,chkPartDF,0,-1);
 | 
						|
			GuiCheckBox chkCreateFiles = MakeGuiCheckBox( "chkCreateFiles", "Create Code Files", true, "Create Code Files" ,150);
 | 
						|
			GuiCheckBox chkDebug = MakeGuiCheckBox("chkDebug","Debug Output",true,"Add Debug",130,chkCreateFiles,150,0);
 | 
						|
			chkDebug.Checked = false;
 | 
						|
			GuiTextBox tbDebug = ui.AddTextBox( "tbDebug", "", "Start Date" );
 | 
						|
			tbDebug.Top = chkDebug.Top;
 | 
						|
			tbDebug.Width = 150;
 | 
						|
			tbDebug.Left = chkDebug.Left + 150;
 | 
						|
			GuiLabel label7 = ui.AddLabel( "label7", "Select tables:", "Select tables from the listbox below." );
 | 
						|
			//label7.Top = chkEqualsHashCode.Top + 20;
 | 
						|
			GuiListBox chooseTables = ui.AddListBox( "chooseTables", "Select tables." );
 | 
						|
			chooseTables.Height = 120;
 | 
						|
	
 | 
						|
			// Setup Views selection multi-select listbox.
 | 
						|
			GuiLabel label8 = ui.AddLabel( "label8", "Select views:", "Select views from the listbox below." );
 | 
						|
			GuiListBox chooseViews = ui.AddListBox( "chooseViews", "Select views." );
 | 
						|
			chooseViews.Height = 120;
 | 
						|
			
 | 
						|
			// Attach the onchange event to the cmbDatabases control.
 | 
						|
			setupDatabaseDropdown( chooseDatabase );
 | 
						|
			chooseDatabase.AttachEvent( "onchange", "chooseDatabase_onchange" );
 | 
						|
	
 | 
						|
			ui.ShowGui = true;
 | 
						|
		}
 | 
						|
		else 
 | 
						|
		{
 | 
						|
			ui.ShowGui = false;
 | 
						|
		}
 | 
						|
		bInitializing = false;
 | 
						|
	}
 | 
						|
	public void setupDatabaseDropdown( GuiComboBox Databases )
 | 
						|
	{
 | 
						|
		try 
 | 
						|
		{	
 | 
						|
			if( MyMeta.IsConnected )
 | 
						|
			{
 | 
						|
				Databases.BindData( MyMeta.Databases );
 | 
						|
				if( MyMeta.DefaultDatabase != null ) 
 | 
						|
				{
 | 
						|
					Databases.SelectedValue = MyMeta.DefaultDatabase.Alias;
 | 
						|
					bindTables( Databases.SelectedValue );
 | 
						|
					bindViews( Databases.SelectedValue );
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		catch
 | 
						|
		{
 | 
						|
		}
 | 
						|
	}
 | 
						|
	
 | 
						|
	public void bindTables( string sDatabase )
 | 
						|
	{
 | 
						|
		int count = 0;
 | 
						|
	
 | 
						|
		GuiListBox lstTables = ui["chooseTables"] as GuiListBox;
 | 
						|
		
 | 
						|
		try 
 | 
						|
		{	
 | 
						|
			IDatabase db = MyMeta.Databases[sDatabase];
 | 
						|
			lstTables.BindData( db.Tables );
 | 
						|
		}
 | 
						|
		catch
 | 
						|
		{
 | 
						|
		}
 | 
						|
	}
 | 
						|
	
 | 
						|
	public void bindViews( string sDatabase )
 | 
						|
	{
 | 
						|
		int count = 0;
 | 
						|
	
 | 
						|
		GuiListBox lstViews = ui["chooseViews"] as GuiListBox;
 | 
						|
		
 | 
						|
		try 
 | 
						|
		{	
 | 
						|
			IDatabase db = MyMeta.Databases[sDatabase];
 | 
						|
			lstViews.BindData( db.Views );
 | 
						|
		}
 | 
						|
		catch
 | 
						|
		{
 | 
						|
		}
 | 
						|
	}
 | 
						|
	
 | 
						|
	public void chooseDatabase_onchange( GuiComboBox control )
 | 
						|
	{
 | 
						|
		int count = 0;
 | 
						|
		GuiComboBox cmbDatabases = ui["chooseDatabase"] as GuiComboBox;
 | 
						|
		bindTables( cmbDatabases.SelectedText );
 | 
						|
		bindViews( cmbDatabases.SelectedText );
 | 
						|
		GuiTextBox dbConnection = ui["dbConnection"] as GuiTextBox;
 | 
						|
		dbConnection.Text=cmbDatabases.SelectedText;
 | 
						|
		GuiTextBox classNamespace = ui["classNamespace"] as GuiTextBox;
 | 
						|
		classNamespace.Text=cmbDatabases.SelectedText + ".CSLA.Library";
 | 
						|
	}
 | 
						|
	<%#FILE MakeGuiCheckBox.cs %>
 | 
						|
	
 | 
						|
}
 | 
						|
##|GUI_END
 | 
						|
##|BODY_MODE Markup
 | 
						|
##|BODY_ENGINE .Net Script
 | 
						|
##|BODY_LANGUAGE C#
 | 
						|
##|BODY_TAG_START <%
 | 
						|
##|BODY_TAG_END %>
 | 
						|
##|BODY_BEGIN
 | 
						|
<%#NAMESPACE System.IO, System.Text, System.Text.RegularExpressions, System.Globalization %><%
 | 
						|
public class GeneratedTemplate : DotNetScriptTemplate
 | 
						|
{
 | 
						|
	private ArrayList _selectedTables;
 | 
						|
	private ArrayList _selectedViews;
 | 
						|
	private ArrayList _classList;
 | 
						|
	private ArrayList _duplicateList;
 | 
						|
	private ArrayList _PropDescList;
 | 
						|
	private string _dbName;
 | 
						|
	private string _tableName;
 | 
						|
	private string _className;
 | 
						|
	private string _exportPath;
 | 
						|
	private string _nameSpace;
 | 
						|
	private string _prefix;
 | 
						|
	private string _dbConnection;
 | 
						|
	private string _subclassName;
 | 
						|
	private string _refreshMine;
 | 
						|
	private ITable _workingTable;
 | 
						|
	private Hashtable dicRead;
 | 
						|
	//private Hashtable dicReadI;
 | 
						|
	private bool _chkGenerateMain; 
 | 
						|
	private bool _chkFKList; 
 | 
						|
	private bool _chkFKItem; 
 | 
						|
	private bool _chkInfoList; 
 | 
						|
	private bool _chkInfo; 
 | 
						|
	private bool _chkCreateFiles; 
 | 
						|
	private bool _chkPartBM;
 | 
						|
	private bool _chkPartDA;
 | 
						|
	private bool _chkPartVR;
 | 
						|
	private bool _chkPartEX;
 | 
						|
	private bool _chkPartAR;
 | 
						|
	private bool _chkPartDF;
 | 
						|
	private bool _chkPartFM;
 | 
						|
	private bool _chkPartEXT;
 | 
						|
	private bool _chkPartCM;
 | 
						|
	private bool _chkDatabase;
 | 
						|
	private bool _chkPartL4N;
 | 
						|
	private bool _chkDebug;
 | 
						|
	private bool _chkVolian;
 | 
						|
	private string _tbDebug;
 | 
						|
	private string _databaseLogDebug;
 | 
						|
	private string _databaseLogInfo;
 | 
						|
	private string _databaseLogWarn;
 | 
						|
	private string _databaseLogError;
 | 
						|
	private string _databaseLogFatal;
 | 
						|
	private bool _doOldParent=false;
 | 
						|
	
 | 
						|
	public bool AddToClassList(string className)
 | 
						|
	{
 | 
						|
		if (_classList.Contains(className))
 | 
						|
		{
 | 
						|
			_duplicateList.Add(className);
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			_classList.Add(className);
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	public delegate bool Filter(IColumn column);
 | 
						|
	public string Debug(string str)
 | 
						|
	{
 | 
						|
	if (_chkDebug && str.CompareTo(_tbDebug) >= 0)return "/**** MyGeneration Debug " + str + " ****/";
 | 
						|
	return "";
 | 
						|
	}
 | 
						|
	public string DebugLine(string str)
 | 
						|
	{
 | 
						|
	if (_chkDebug && str.CompareTo(_tbDebug) >= 0)return "\r\n/**** MyGeneration Debug " + str + " ****/";
 | 
						|
	return "";
 | 
						|
	}
 | 
						|
	public void SaveFile()
 | 
						|
	{
 | 
						|
		if (_chkCreateFiles)
 | 
						|
		{
 | 
						|
			output.save( Path.Combine( _exportPath, _className + ".cs" ), false );
 | 
						|
			output.clear();
 | 
						|
		}
 | 
						|
	}
 | 
						|
	public GeneratedTemplate( ZeusContext context ) : base( context ) {}
 | 
						|
 | 
						|
	public override void Render()
 | 
						|
	{	
 | 
						|
		DateTime tStart = DateTime.Now;
 | 
						|
		if (context.Objects.ContainsKey("DnpUtils"))DnpUtils.SaveInputToCache(context);
 | 
						|
		try{
 | 
						|
			InitializeDictionaries();
 | 
						|
			_dbName = input["chooseDatabase"].ToString();
 | 
						|
			_PropDescList = new ArrayList();
 | 
						|
			_selectedTables = input["chooseTables"] as ArrayList;
 | 
						|
			_selectedViews = input["chooseViews"] as ArrayList;
 | 
						|
			_exportPath = input["outputPath"].ToString();
 | 
						|
			_nameSpace = input["classNamespace"].ToString();
 | 
						|
			_prefix = input["memberPrefix"].ToString();
 | 
						|
			_dbConnection = input["dbConnection"].ToString();
 | 
						|
			_chkGenerateMain=(bool)input["chkGenerateMain"];
 | 
						|
			_chkFKList=(bool)input["chkFKList"];
 | 
						|
			_chkFKItem=(bool)input["chkFKItem"];
 | 
						|
			_chkInfoList=(bool)input["chkInfoList"];
 | 
						|
			_chkInfo=(bool)input["chkInfo"];
 | 
						|
			_chkCreateFiles=(bool)input["chkCreateFiles"];
 | 
						|
			_chkPartBM=(bool)input["chkPartBM"];
 | 
						|
			_chkPartDA=(bool)input["chkPartDA"];
 | 
						|
			_chkPartVR=(bool)input["chkPartVR"];
 | 
						|
			_chkPartEX=(bool)input["chkPartEX"];
 | 
						|
			_chkPartAR=(bool)input["chkPartAR"];
 | 
						|
			_chkPartDF=(bool)input["chkPartDF"];
 | 
						|
			_chkPartFM=(bool)input["chkPartFM"];
 | 
						|
			_chkPartEXT=(bool)input["chkPartEXT"];
 | 
						|
			_chkPartCM=(bool)input["chkPartCM"];
 | 
						|
			_chkPartL4N=(bool)input["chkPartL4N"];
 | 
						|
			if (_chkPartL4N)
 | 
						|
			{
 | 
						|
				_databaseLogDebug = "if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat";
 | 
						|
				_databaseLogInfo = "if (_MyLog.IsInfoEnabled) _MyLog.InfoFormat";
 | 
						|
				_databaseLogWarn = "if (_MyLog.IsWarnEnabled) _MyLog.WarnFormat";
 | 
						|
				_databaseLogError = "if (_MyLog.IsErrorEnabled) _MyLog.Error";
 | 
						|
				_databaseLogFatal = "if (_MyLog.IsFatalEnabled) _MyLog.Fatal";
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				_databaseLogDebug = "Database.LogInfo";
 | 
						|
				_databaseLogInfo = "Database.LogInfo";
 | 
						|
				_databaseLogWarn = "Database.LogInfo";
 | 
						|
				_databaseLogError = "Database.LogException";
 | 
						|
				_databaseLogFatal = "Database.LogException";
 | 
						|
			}
 | 
						|
			_chkDatabase=(bool)input["chkDatabase"];
 | 
						|
			_chkDebug=(bool)input["chkDebug"];
 | 
						|
			_chkVolian=(bool)input["chkVolian"];
 | 
						|
			_tbDebug=(string)input["tbDebug"];
 | 
						|
			_classList=new ArrayList();
 | 
						|
			_duplicateList=new ArrayList();
 | 
						|
			if (_chkDatabase)GenerateDatabase();
 | 
						|
			foreach( string _newTable in _selectedTables )
 | 
						|
			{
 | 
						|
				_workingTable = MyMeta.Databases[_dbName].Tables[_newTable];
 | 
						|
				GenerateClassFiles( _workingTable );
 | 
						|
			}
 | 
						|
			GeneratePropertyDescriptor();
 | 
						|
			GenerateCommonRules();
 | 
						|
			if (_duplicateList.Count > 0)
 | 
						|
			{
 | 
						|
				WriteLine("Duplicate Classes");
 | 
						|
				foreach(string s in _duplicateList)
 | 
						|
				{
 | 
						|
					WriteLine("[{0}]",s);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			DateTime tEnd = DateTime.Now;
 | 
						|
			WriteLine(string.Format("Total Generation Time: {0} Seconds",TimeSpan.FromTicks(tEnd.Ticks - tStart.Ticks).TotalSeconds));
 | 
						|
			//foreach( string _newView in _selectedViews )
 | 
						|
			//{
 | 
						|
			//	IView _workingView = MyMeta.Databases[_dbName].Views[_newView];
 | 
						|
			//		GenerateClassFiles( _workingView.Columns, _className);
 | 
						|
			//}
 | 
						|
		}
 | 
						|
		catch(Exception ex)
 | 
						|
		{
 | 
						|
			output.write(ex.Message);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	private void InitializeDictionaries()
 | 
						|
	{
 | 
						|
		dicRead = new Hashtable();
 | 
						|
		dicRead["Guid"]="{fmember} = dr.GetGuid(\"{fname}\");";
 | 
						|
		dicRead["string"]="{fmember} = dr.GetString(\"{fname}\");";
 | 
						|
		dicRead["SmartDate"]="{fmember} = dr.GetSmartDate(\"{fname}\").Text;";
 | 
						|
		dicRead["DateTime"]="{fmember} = dr.GetDateTime(\"{fname}\");";
 | 
						|
		dicRead["timestamp"]="dr.GetBytes(\"{fname}\", 0, {fmember}, 0, 8);";
 | 
						|
		dicRead["image"]="{fmember} = (byte[])dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["varbinary"]="{fmember} = (byte[])dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["int"]="{fmember} = dr.GetInt32(\"{fname}\");";
 | 
						|
		dicRead["Int32"]="{fmember} = dr.GetInt32(\"{fname}\");";
 | 
						|
		dicRead["Int16"]="{fmember} = dr.GetInt16(\"{fname}\");";
 | 
						|
		dicRead["Int16"]="{fmember} = dr.GetInt16(\"{fname}\");";
 | 
						|
		dicRead["Int64"]="{fmember} = dr.GetInt64(\"{fname}\");";
 | 
						|
		dicRead["byte"]="{fmember} = dr.GetByte(\"{fname}\");";
 | 
						|
		dicRead["char"]="{fmember} = dr.GetChar(\"{fname}\");";
 | 
						|
		dicRead["double"]="{fmember} = dr.GetDouble(\"{fname}\");";
 | 
						|
		dicRead["float"]="{fmember} = dr.GetFloat(\"{fname}\");";
 | 
						|
		dicRead["decimal"]="{fmember} = dr.GetDecimal(\"{fname}\");";
 | 
						|
		dicRead["bool"]="{fmember} = dr.GetBoolean(\"{fname}\");";
 | 
						|
		dicRead["long"]="{fmember} = dr.GetInt64(\"{fname}\");";
 | 
						|
		dicRead["int?"]="{fmember} = ({ctype})dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["Int32?"]="{fmember} = ({ctype})dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["Int16?"]="{fmember} = ({ctype})dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["Int16?"]="{fmember} = ({ctype})dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["Int64?"]="{fmember} = ({ctype})dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["byte?"]="{fmember} = ({ctype})dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["char?"]="{fmember} = ({ctype})dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["double?"]="{fmember} = ({ctype})dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["float?"]="{fmember} = ({ctype})dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["decimal?"]="{fmember} = ({ctype})dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["bool?"]="{fmember} = ({ctype})dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["long?"]="{fmember} = ({ctype})dr.GetValue(\"{fname}\");";
 | 
						|
		dicRead["DateTime?"]="if (!dr.IsDBNull(dr.GetOrdinal(\"{fname}\"))) {fmember} = dr.GetDateTime(\"{fname}\");";
 | 
						|
	}
 | 
						|
	private void GenerateClassFiles(ITable tbl)
 | 
						|
	{
 | 
						|
		if (_chkGenerateMain)GenerateMainClass(tbl);
 | 
						|
		Hashtable dicAlias = new Hashtable();
 | 
						|
		foreach(IForeignKey fk in tbl.ForeignKeys)
 | 
						|
		{
 | 
						|
			if (tbl == fk.PrimaryTable)
 | 
						|
			{
 | 
						|
				if (!IsPrimaryKey(fk))
 | 
						|
				{
 | 
						|
					//string sAlias = GetAlias(dicAlias,fk.ForeignTable);
 | 
						|
					string sAlias = GetAlias(fk);
 | 
						|
					if (_chkFKList)GenerateFKListClass(fk,sAlias);
 | 
						|
					if (_chkFKItem && fk.PrimaryTable != fk.ForeignTable )GenerateFKClass(fk,sAlias);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if (_chkInfoList && AnyNotOneToOne(tbl))GenerateInfoListClass(tbl); // InfoList if any non 1 to 1 relationships
 | 
						|
		if (_chkInfo)GenerateInfoClass(tbl);
 | 
						|
	}
 | 
						|
//	private void ShowForeignKey(ForeignKey fk)
 | 
						|
//	{
 | 
						|
//		output.writeln("Primary " + fk.PrimaryTable.Name);
 | 
						|
//		foreach(IColumn col in fk.PrimaryColumns)output.writeln("  " + col.Name + " " + col.IsInPrimaryKey.ToString());
 | 
						|
//		output.writeln(" Foreign " + fk.ForeignTable.Name);
 | 
						|
//		foreach(IColumn col in fk.ForeignColumns)output.writeln("  " + col.Name + " " + col.IsInPrimaryKey.ToString());
 | 
						|
//	}
 | 
						|
	private void GenerateMainClass( ITable tbl )
 | 
						|
	{
 | 
						|
		_className = ClassName( tbl );
 | 
						|
		_PropDescList.Add(_className);
 | 
						|
		if (!AddToClassList(_className))return;
 | 
						|
		_tableName = tbl.Alias;
 | 
						|
		vlnHeader("\r\nusing System.Collections.Generic;\r\nusing Csla.Validation;");
 | 
						|
		string sInterface="";
 | 
						|
		if (_chkPartCM)
 | 
						|
		{
 | 
						|
			//sInterface = ", ICustomTypeDescriptor";
 | 
						|
%>
 | 
						|
	[TypeConverter(typeof(<%=_className%>Converter))]<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
	public partial class <%=_className%> : BusinessBase<<%=_className%>><%=sInterface%>, IDisposable, IVEHasBrokenRules
 | 
						|
	{<%
 | 
						|
		Log4Net();
 | 
						|
		vlnRefreshInfo();
 | 
						|
		vlnCollection(tbl,UniqueIndexes(tbl),false);
 | 
						|
		if (_chkPartBM)vlnBusinessMethods(tbl.Columns);
 | 
						|
		if (_chkPartVR)vlnValidationRules(tbl.Columns);
 | 
						|
		if (_chkPartAR)vlnAuthorizationRules(tbl.Columns);
 | 
						|
		if (_chkPartFM)vlnFactoryMethods(tbl.Columns);
 | 
						|
		if (_chkPartDA)vlnDataAccessPortal(tbl.Columns);
 | 
						|
		if (_chkPartEX)vlnExists(tbl.Columns);
 | 
						|
		if (_chkPartDF)vlnDefaults(tbl.Columns);
 | 
						|
		vlnFooterCM("");
 | 
						|
		if (_chkPartEXT)vlnExtension(tbl.Columns);
 | 
						|
		SaveFile();
 | 
						|
	}
 | 
						|
	private void GenerateFKListClass(IForeignKey fk,string sAlias)
 | 
						|
	{
 | 
						|
		_className =  ClassName( fk.PrimaryTable ) + ClassesName( fk.ForeignTable )+sAlias;
 | 
						|
		_className = FKClassesName(fk)+sAlias;
 | 
						|
		if (!AddToClassList(_className))return;
 | 
						|
		if (fk.PrimaryTable == fk.ForeignTable)
 | 
						|
			_subclassName =  ClassName( fk.PrimaryTable);
 | 
						|
		else
 | 
						|
			_subclassName =  ClassName( fk.PrimaryTable) + ClassName( fk.ForeignTable )+sAlias;
 | 
						|
		_tableName =  "//CSLATODO: No Table Name";
 | 
						|
		vlnHeader("\r\nusing System.Collections.Generic;\r\nusing Csla.Validation;");
 | 
						|
		string sInterface = "";
 | 
						|
		if (_chkPartCM)
 | 
						|
		{
 | 
						|
			sInterface = ", ICustomTypeDescriptor";
 | 
						|
%>
 | 
						|
	[TypeConverter(typeof(<%=_className%>Converter))]<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
	public partial class <%=_className%> : BusinessListBase<<%=_className%>, <%=_subclassName%>><%=sInterface%>, IVEHasBrokenRules , IDisposable
 | 
						|
	{<%
 | 
						|
		Log4Net();
 | 
						|
		if (_chkPartBM)vlnBusinessMethodsFKList(fk,sAlias);
 | 
						|
		if (_chkPartVR)vlnValidationRulesFKList(fk,sAlias);
 | 
						|
		if (_chkPartFM)vlnFactoryMethodsFKList(fk,sAlias);
 | 
						|
		if (_chkPartDA)vlnDataAccessPortalFKList(fk,sAlias);
 | 
						|
		vlnFooterCM(ClassesName( fk.ForeignTable ) + sAlias);
 | 
						|
		SaveFile();
 | 
						|
	}
 | 
						|
	private void GenerateFKClass(IForeignKey fk,string sAlias)
 | 
						|
	{
 | 
						|
		_className =  ClassName( fk.PrimaryTable ) + ClassName( fk.ForeignTable ) + sAlias;
 | 
						|
		_PropDescList.Add(_className);
 | 
						|
		if (!AddToClassList(_className))return;
 | 
						|
		_tableName =  fk.ForeignTable.Alias;
 | 
						|
		vlnHeader("\r\nusing System.Collections.Generic;\r\nusing Csla.Validation;");
 | 
						|
		string sInterface="";
 | 
						|
		if (_chkPartCM)
 | 
						|
		{
 | 
						|
			//sInterface = ", ICustomTypeDescriptor";
 | 
						|
%>
 | 
						|
	[TypeConverter(typeof(<%=_className%>Converter))]<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
	public partial class <%=_className%> : BusinessBase<<%=_className%>><%=sInterface%>, IVEHasBrokenRules, IDisposable
 | 
						|
	{<%
 | 
						|
		Log4Net();
 | 
						|
		if (_chkPartBM)vlnBusinessMethodsFKItem(fk,sAlias);
 | 
						|
		if (_chkPartVR)vlnValidationRulesFKItem(fk,sAlias);
 | 
						|
		if (_chkPartAR)vlnAuthorizationRulesFKItem(fk,sAlias);
 | 
						|
		if (_chkPartFM)vlnFactoryMethodsFKItem(fk,sAlias);
 | 
						|
		if (_chkPartDA)vlnDataAccessPortalFKItem(fk,sAlias);
 | 
						|
		if (_chkPartDF)vlnDefaults(fk.ForeignTable.Columns);
 | 
						|
		vlnFooterCM("");
 | 
						|
		if (_chkPartEXT)vlnExtension(fk.ForeignTable.Columns);
 | 
						|
		SaveFile();
 | 
						|
	}
 | 
						|
	private void vlnFooterCM(string displayName)
 | 
						|
	{
 | 
						|
		if (_chkPartCM)
 | 
						|
		{
 | 
						|
			if (displayName!="")vlnComponentModelFKList();
 | 
						|
%>
 | 
						|
	} // Class<%
 | 
						|
			if (displayName!="")vlnPropertyDescriptorFKList();
 | 
						|
			if (displayName!="")vlnConvertorFKList(displayName);
 | 
						|
			else vlnConvertorFKItem();
 | 
						|
%>
 | 
						|
} // Namespace
 | 
						|
<%
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
%>
 | 
						|
	} // Class
 | 
						|
} // Namespace
 | 
						|
<%
 | 
						|
		}
 | 
						|
	}
 | 
						|
	private void GenerateInfoListClass( ITable tbl )
 | 
						|
	{
 | 
						|
		_className = ClassName( tbl ) + "InfoList";
 | 
						|
		if (!AddToClassList(_className))return;
 | 
						|
		_tableName = tbl.Alias;
 | 
						|
		_subclassName =  ClassName( tbl ) + "Info";
 | 
						|
		vlnHeader("\r\nusing System.Collections.Generic;");
 | 
						|
		string sInterface="";
 | 
						|
		if (_chkPartCM)
 | 
						|
		{
 | 
						|
			sInterface = ", ICustomTypeDescriptor";
 | 
						|
%>
 | 
						|
	[TypeConverter(typeof(<%=_className%>Converter))]<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
	public partial class <%=_className%> : ReadOnlyListBase<<%=_className%>, <%=_subclassName%>><%=sInterface%>, IDisposable
 | 
						|
	{<%
 | 
						|
		Log4Net();
 | 
						|
		if (_chkPartBM)
 | 
						|
		{
 | 
						|
%>
 | 
						|
		#region Business Methods
 | 
						|
		internal new IList<<%=_subclassName%>> Items
 | 
						|
		{ get { return base.Items; } }
 | 
						|
		public void AddEvents()
 | 
						|
		{
 | 
						|
			foreach (<%=_subclassName%> tmp in this)
 | 
						|
			{
 | 
						|
				tmp.Changed += new <%=_subclassName%>Event(tmp_Changed);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		void tmp_Changed(object sender)
 | 
						|
		{
 | 
						|
			for (int i = 0; i < Count; i++)
 | 
						|
			{
 | 
						|
				if (base[i] == sender)
 | 
						|
					this.OnListChanged(new ListChangedEventArgs(ListChangedType.ItemChanged, i));
 | 
						|
			}
 | 
						|
		}
 | 
						|
		private bool _Disposed = false;
 | 
						|
		private static int _CountCreated = 0;
 | 
						|
		private static int _CountDisposed = 0;
 | 
						|
		private static int _CountFinalized = 0;
 | 
						|
		private static int IncrementCountCreated
 | 
						|
		{ get { return ++_CountCreated; } }
 | 
						|
		private int _CountWhenCreated = IncrementCountCreated;
 | 
						|
		public static int CountCreated
 | 
						|
		{ get { return _CountCreated; } }
 | 
						|
		public static int CountNotDisposed
 | 
						|
		{ get { return _CountCreated - _CountDisposed; } }
 | 
						|
		public static int CountNotFinalized
 | 
						|
		{ get { return _CountCreated - _CountFinalized; } }
 | 
						|
		~<%=_className%>()
 | 
						|
		{
 | 
						|
			_CountFinalized++;
 | 
						|
		}
 | 
						|
		public void Dispose()
 | 
						|
		{
 | 
						|
			if (_Disposed) return;
 | 
						|
			_CountDisposed++;
 | 
						|
			_Disposed = true;
 | 
						|
			foreach (<%=_subclassName%> tmp in this)
 | 
						|
			{
 | 
						|
				tmp.Changed -= new <%=_subclassName%>Event(tmp_Changed);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#endregion<%}
 | 
						|
		if (_chkPartFM)vlnFactoryMethodsInfoList(tbl.Columns);
 | 
						|
		if (_chkPartDA)vlnDataAccessPortalInfoList(tbl.Columns);
 | 
						|
		vlnFooterCM(ClassesName( tbl ) );
 | 
						|
		SaveFile();
 | 
						|
	}
 | 
						|
	private void GenerateInfoClass( ITable tbl )
 | 
						|
	{
 | 
						|
		_className = ClassName( tbl ) + "Info";
 | 
						|
		_PropDescList.Add(_className);
 | 
						|
		if (!AddToClassList(_className))return;
 | 
						|
		_tableName = tbl.Alias;
 | 
						|
		vlnHeader("\r\nusing System.Collections.Generic;","\r\n\tpublic delegate void " + _className + "Event(object sender);");
 | 
						|
		string sInterface="";
 | 
						|
		if (_chkPartCM)
 | 
						|
		{
 | 
						|
			//sInterface = ", ICustomTypeDescriptor";
 | 
						|
%>
 | 
						|
	[TypeConverter(typeof(<%=_className%>Converter))]<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
	public partial class <%=_className%> : ReadOnlyBase<<%=_className%>><%=sInterface%>, IDisposable
 | 
						|
	{
 | 
						|
		public event <%=_className%>Event Changed;
 | 
						|
		private void OnChange()
 | 
						|
		{
 | 
						|
			if (Changed != null) Changed(this);
 | 
						|
		}<%
 | 
						|
		Log4Net();
 | 
						|
		vlnCollection(tbl,new ArrayList(),true);
 | 
						|
		if (_chkPartBM)vlnBusinessMethodsInfo(tbl.Columns);
 | 
						|
		if (_chkPartFM)vlnFactoryMethodsInfo(tbl.Columns);
 | 
						|
		if (_chkPartDA)vlnDataAccessPortalInfo(tbl.Columns);
 | 
						|
		vlnInfoExtension(tbl.Columns);//20070410
 | 
						|
		vlnFooterCM("");
 | 
						|
		SaveFile();
 | 
						|
	}
 | 
						|
	private void vlnHeader()
 | 
						|
	{
 | 
						|
		vlnHeader("");
 | 
						|
	}
 | 
						|
	private void vlnHeader(string sUsing)
 | 
						|
	{
 | 
						|
		vlnHeader(sUsing,"");
 | 
						|
	}
 | 
						|
	private void vlnHeader(string sUsing,bool serialize)
 | 
						|
	{
 | 
						|
		vlnHeader(sUsing,"",serialize);
 | 
						|
	}
 | 
						|
	private void vlnHeader(string sUsing,string sDelegate)
 | 
						|
	{
 | 
						|
		vlnHeader(sUsing,sDelegate,true);
 | 
						|
	}
 | 
						|
	private void vlnHeader(string sUsing,string sDelegate,bool serialize)
 | 
						|
	{
 | 
						|
		if (_chkVolian){
 | 
						|
%>// ========================================================================
 | 
						|
// Copyright 2007 - Volian Enterprises, Inc. All rights reserved.          
 | 
						|
// Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
 | 
						|
// ------------------------------------------------------------------------
 | 
						|
// $Workfile: $     $Revision: $                                           
 | 
						|
// $Author: $   $Date: $                                                   
 | 
						|
//                                                                         
 | 
						|
// $History: $                                                             
 | 
						|
// ========================================================================
 | 
						|
<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
using System;
 | 
						|
using System.Data;
 | 
						|
using System.Data.SqlClient;
 | 
						|
using Csla;
 | 
						|
using Csla.Data;
 | 
						|
using System.Configuration;
 | 
						|
using System.IO;<%
 | 
						|
		if (_chkPartCM)
 | 
						|
		{
 | 
						|
%>
 | 
						|
using System.ComponentModel;<%
 | 
						|
		}
 | 
						|
%><%=sUsing%>
 | 
						|
namespace <%=_nameSpace%>
 | 
						|
{<%=sDelegate%>
 | 
						|
	/// <summary>
 | 
						|
	///	<%=_className%> Generated by MyGeneration using the CSLA Object Mapping template
 | 
						|
	/// </summary><%
 | 
						|
		if (serialize)
 | 
						|
		{
 | 
						|
%>
 | 
						|
	[Serializable()]<%
 | 
						|
		}
 | 
						|
	}
 | 
						|
	private bool IsPrimaryKey(IIndex ind)
 | 
						|
	{
 | 
						|
		IColumns colsi = ind.Columns;
 | 
						|
		IColumns colsp = ind.Table.PrimaryKeys;
 | 
						|
		if (colsi.Count != colsp.Count)return false;
 | 
						|
		for(int i=0;i<colsi.Count;i++)
 | 
						|
		{
 | 
						|
			if (colsi[i]!=colsp[i])
 | 
						|
				return false;
 | 
						|
		}
 | 
						|
		return true;
 | 
						|
	}
 | 
						|
	private ArrayList UniqueIndexes(ITable tbl)
 | 
						|
	{
 | 
						|
		ArrayList retval = new ArrayList();
 | 
						|
		foreach(Index ind in tbl.Indexes)
 | 
						|
		{
 | 
						|
			if (!IsPrimaryKey(ind) && ind.Unique)
 | 
						|
			{
 | 
						|
				retval.Add(ind);		
 | 
						|
			}
 | 
						|
		}
 | 
						|
		return retval;
 | 
						|
	}
 | 
						|
	private void vlnCollection(ITable tbl,ArrayList uniqueIndexes,bool bInfo)
 | 
						|
	{
 | 
						|
		string pKey = FormatColumns("tmp.{prop}.ToString()",tbl.PrimaryKeys," + \"_\" + ","");
 | 
						|
		string pKey2 = FormatColumns("{local}.ToString()",tbl.PrimaryKeys," + \"_\" + ","");
 | 
						|
		string pKeys = FormatColumns("{local}",tbl.PrimaryKeys,", ","");
 | 
						|
		string pKeysType = FormatColumns("{ctype} {local}",tbl.PrimaryKeys,", ","");
 | 
						|
%>
 | 
						|
		#region Collection
 | 
						|
		private static List<<%=_className%>> _CacheList = new List<<%=_className%>>();
 | 
						|
		protected static void AddToCache(<%=_className%> <%=LocalName(_className)%>)
 | 
						|
		{
 | 
						|
			if (!_CacheList.Contains(<%=LocalName(_className)%>)) _CacheList.Add(<%=LocalName(_className)%>); // In AddToCache
 | 
						|
		}
 | 
						|
		protected static void RemoveFromCache(<%=_className%> <%=LocalName(_className)%>)
 | 
						|
		{
 | 
						|
			while (_CacheList.Contains(<%=LocalName(_className)%>)) _CacheList.Remove(<%=LocalName(_className)%>); // In RemoveFromCache
 | 
						|
		}
 | 
						|
		private static Dictionary<string, List<<%=_className%>>> _CacheByPrimaryKey = new Dictionary<string, List<<%=_className%>>>();<%
 | 
						|
		//ArrayList uniqueIndexes=UniqueIndexes(tbl);
 | 
						|
		foreach(IIndex ind in uniqueIndexes)
 | 
						|
		{
 | 
						|
			string sBy = FormatColumns("{name}",ind.Columns,"_","");
 | 
						|
%>
 | 
						|
		private static Dictionary<string, List<<%=_className%>>> _CacheBy<%=sBy%> = new Dictionary<string, List<<%=_className%>>>();<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		private static void ConvertListToDictionary()
 | 
						|
		{
 | 
						|
			while (_CacheList.Count > 0) // Move <%=_className%>(s) from temporary _CacheList to _CacheByPrimaryKey
 | 
						|
			{
 | 
						|
				<%=_className%> tmp = _CacheList[0]; // Get the first <%=_className%>
 | 
						|
				string pKey = <%=pKey%>;
 | 
						|
				if (!_CacheByPrimaryKey.ContainsKey(pKey))
 | 
						|
				{
 | 
						|
					_CacheByPrimaryKey[pKey] = new List<<%=_className%>>(); // Add new list for PrimaryKey<%
 | 
						|
		foreach(IIndex ind in uniqueIndexes)
 | 
						|
		{
 | 
						|
			string sBy = FormatColumns("{name}",ind.Columns,"_","");
 | 
						|
			string sKey = FormatColumns("tmp.{prop}.ToString()",ind.Columns," + \"_\" + ","");
 | 
						|
%>
 | 
						|
					_CacheBy<%=sBy%>[<%=sKey%>] = new List<<%=_className%>>(); // Add new list for <%=sBy%><%
 | 
						|
		}
 | 
						|
%>
 | 
						|
				}
 | 
						|
				_CacheByPrimaryKey[pKey].Add(tmp); // Add to Primary Key list<%
 | 
						|
		foreach(IIndex ind in uniqueIndexes)
 | 
						|
		{
 | 
						|
			string sBy = FormatColumns("{name}",ind.Columns,"_","");
 | 
						|
			string sKey = FormatColumns("tmp.{prop}.ToString()",ind.Columns," + \"_\" + ","");
 | 
						|
%>
 | 
						|
				_CacheBy<%=sBy%>[<%=sKey%>].Add(tmp); // Unique Index<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
				_CacheList.RemoveAt(0); // Remove the first <%=_className%>
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
		if (bInfo && AnyNotOneToOne(_workingTable)) // AddList function for infolist - Any non 1 to 1 relationships
 | 
						|
		{
 | 
						|
%>
 | 
						|
		internal static void AddList(<%=_className%>List lst)
 | 
						|
		{
 | 
						|
			foreach (<%=_className%> item in lst) AddToCache(item);
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		protected static <%=_className%> GetCachedByPrimaryKey(<%=pKeysType%>)
 | 
						|
		{
 | 
						|
			ConvertListToDictionary();
 | 
						|
			string key = <%=pKey2%>;
 | 
						|
			if (_CacheByPrimaryKey.ContainsKey(key)) return _CacheByPrimaryKey[key][0];
 | 
						|
			return null;
 | 
						|
		}<%
 | 
						|
		foreach(IIndex ind in uniqueIndexes)
 | 
						|
		{
 | 
						|
			string sBy = FormatColumns("{name}",ind.Columns,"_","");
 | 
						|
			string sKey = FormatColumns("{local}.ToString()",ind.Columns," + \"_\" + ","");
 | 
						|
			string sKeysType = FormatColumns("{ctype} {local}",ind.Columns,", ","");
 | 
						|
			string sKeys = FormatColumns("{local}",ind.Columns,", ","");
 | 
						|
%>
 | 
						|
		protected static <%=_className%> GetCachedBy<%=sBy%>(<%=sKeysType%>)
 | 
						|
		{
 | 
						|
			ConvertListToDictionary();
 | 
						|
			string key = <%=sKey%>;
 | 
						|
			if (_CacheBy<%=sBy%>.ContainsKey(key)) return _CacheBy<%=sBy%>[key][0];
 | 
						|
			return null;
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnBusinessMethods(IColumns Columns )
 | 
						|
	{
 | 
						|
%>
 | 
						|
		#region Business Methods
 | 
						|
		private string _ErrorMessage = string.Empty;
 | 
						|
		public string ErrorMessage
 | 
						|
		{
 | 
						|
			get { return _ErrorMessage; }
 | 
						|
		}<%
 | 
						|
		vlnProperties(Columns);
 | 
						|
		//vlnRelatedItems(Columns);
 | 
						|
		vlnToString(Columns);
 | 
						|
		vlnGetIDValue(_workingTable.PrimaryKeys);
 | 
						|
%>
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private string ParentCheck(IColumn col)  // 20070221 - Logic to check for parent value
 | 
						|
	{
 | 
						|
		IForeignKey pfk = FKParentFK(col.Table);
 | 
						|
		if (pfk == null)return null;
 | 
						|
		IColumn relCol = RelatedColumnF(col,pfk);
 | 
						|
		if (relCol==null) return null;
 | 
						|
		return FormatColumn("\r\n\t\t\t\tif (_" + ParentName(pfk) + " != null) return _" + ParentName(pfk) + ".{prop};",relCol); 
 | 
						|
	}
 | 
						|
	private void vlnProperties(IColumns Columns)
 | 
						|
	{
 | 
						|
		// Create all properties
 | 
						|
		foreach(IColumn col in Columns)
 | 
						|
		{
 | 
						|
			bool bReadOnly = col.IsInPrimaryKey || col.IsAutoKey || col.IsComputed;
 | 
						|
//			bool bRelatedObject = true;
 | 
						|
			vlnIdentity(col);
 | 
						|
//			string sParentCheck = ParentCheck(col);
 | 
						|
//			if (sParentCheck != null)
 | 
						|
//			{
 | 
						|
//				bReadOnly=true;
 | 
						|
//				bRelatedObject=false;
 | 
						|
//			}
 | 
						|
			// Need logic to handle parent child
 | 
						|
			string sParentCheck="";
 | 
						|
			if (IsRelObj(col))
 | 
						|
				sParentCheck =FormatColumn("\r\n\t\t\t\tif ({!member} != null) {member} = {!member}.{!column};",col);
 | 
						|
			vlnProperty(CSLAType( col ),MemberName(col)
 | 
						|
				,PropertyName(col),InitializeValue( col ),GetDescription(col),bReadOnly || IsRelObj(col),col.IsInPrimaryKey,false,null,sParentCheck,null,null);
 | 
						|
//			if (bRelatedObject)
 | 
						|
			vlnRelObjProperty(col,bReadOnly,false);
 | 
						|
		}
 | 
						|
		// Add Foreign Key Properties - This should be controllable
 | 
						|
//		foreach(IColumn field in Columns)
 | 
						|
//		{
 | 
						|
//			if (field.IsInForeignKey && field.IsInPrimaryKey)
 | 
						|
//			{
 | 
						|
				//A column that's in a fk and in the pk represents a fk relationship
 | 
						|
				//from another table, a one-to-many relationship.  (This might be 
 | 
						|
				//a bad assumption for a table with a composite primary key.)
 | 
						|
				//... and then we have to add collections for the foreign tables.
 | 
						|
				string sExtDirty="";
 | 
						|
				string sExtValid="";
 | 
						|
//				foreach( IForeignKey fk in field.ForeignKeys )
 | 
						|
				Hashtable dicAlias = new Hashtable();
 | 
						|
				foreach(IForeignKey fk in _workingTable.ForeignKeys)
 | 
						|
				{
 | 
						|
					if (fk.PrimaryTable == _workingTable){
 | 
						|
						//string sAlias = GetAlias(dicAlias,fk.ForeignTable);
 | 
						|
						string sAlias = GetAlias(fk);
 | 
						|
//							string sList = _className + ClassesName( fk.ForeignTable );
 | 
						|
							string sList = FKClassName(fk );
 | 
						|
							string sLists = FKClassesName(fk );
 | 
						|
							vlnProperty("int",MemberName(sList) + sAlias + "Count" ,sList + sAlias + "Count", " = 0;",
 | 
						|
								"Count of " + sLists + " for this " + ClassName(_workingTable)  + Debug("20070501.3"),true,false,false,null,null,null,null);
 | 
						|
						if (!IsPrimaryKey(fk)){
 | 
						|
							//vlnProperty(sLists+sAlias,MemberName(sLists)+sAlias,sLists + sAlias,
 | 
						|
							//" = " + sLists+sAlias + ".New();","Related Field" + Debug("20070501.2"),true,false,true,fk,null,null,null);
 | 
						|
							vlnProperty(sLists+sAlias,MemberName(sLists)+sAlias,sLists + sAlias,
 | 
						|
							" = null;","Related Field" + Debug("20070501.2"),true,false,true,fk,null,null,null);
 | 
						|
							//sExtDirty += " || " + MemberName(sLists+sAlias) + ".IsDirty";
 | 
						|
							//sExtValid += " && " + MemberName(sLists+sAlias) + ".IsValid";
 | 
						|
							sExtDirty += string.Format(" || ({0} == null ? false : {0}.IsDirtyList(list))",MemberName(sLists+sAlias));
 | 
						|
							// Added List 20100924
 | 
						|
							sExtValid += string.Format(" && ({0} == null ? true : {0}.IsValidList(list))",MemberName(sLists+sAlias));
 | 
						|
						} else {
 | 
						|
							string sItem = ClassName(fk.ForeignTable);
 | 
						|
							//vlnProperty(sItem+sAlias, MemberName("My" + sItem)+sAlias,"My" + sItem + sAlias,
 | 
						|
							//" = My" + sItem+sAlias + ".New();","Related Field",true,false,true,fk,null,null);
 | 
						|
							string sCheck = string.Format("\r\n\t\t\t\tif ({0} == null) {0} = {1}.New({2});",
 | 
						|
								MemberName("My" + sItem)+sAlias, sItem, OneToOne(fk) ? "this" : FormatColumns("{member}",fk.PrimaryColumns,", ",""));
 | 
						|
							vlnProperty(sItem+sAlias, MemberName("My" + sItem)+sAlias,"My" + sItem + sAlias,
 | 
						|
							" = null;","Related Field" + Debug("20070501.1"),true,false,true,fk,sCheck,null,null);
 | 
						|
							bool bReq = !fk.ForeignColumns[0].IsNullable;
 | 
						|
							sExtDirty += string.Format(" || ({0} == null ? false : {0}.IsDirtyList(list))",MemberName("My" + sItem+sAlias));
 | 
						|
							sExtValid += string.Format(" && ({0} == null ? true : {0}.IsValidList(list))",MemberName("My" + sItem+sAlias));
 | 
						|
						}
 | 
						|
					}
 | 
						|
					else // 
 | 
						|
					{
 | 
						|
						if (IsPrimaryKey1(fk) && !IsPrimaryKey(fk)){
 | 
						|
							bool bReq = !fk.ForeignColumns[0].IsNullable;
 | 
						|
							string sClass = ClassName(fk.PrimaryTable.Name) + GetNewAlias(fk,fk);
 | 
						|
							//sExtDirty += string.Format(" || ({0} == null? " + bReq.ToString().ToLower() + " : {0}.IsDirty)",MemberName("My" + sClass));
 | 
						|
							//sExtValid += string.Format(" && ({0} == null? " + (!bReq).ToString().ToLower() + " : {0}.IsValid)",MemberName("My" + sClass));
 | 
						|
							sExtDirty += string.Format(" || ({0} == null ? false : {0}.IsDirtyList(list))",MemberName("My" + sClass));
 | 
						|
							sExtValid += string.Format(" && ({0} == null ? true : {0}.IsValidList(list))",MemberName("My" + sClass));
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
				//if (sExtDirty!="")
 | 
						|
				vlnDirty(sExtDirty);
 | 
						|
				//if (sExtValid!="")vlnOverride("Valid",sExtValid);
 | 
						|
				vlnValid(sExtValid);
 | 
						|
//			}
 | 
						|
//		}
 | 
						|
	}
 | 
						|
	private void vlnDirty(string sExtension)
 | 
						|
	{
 | 
						|
		if(sExtension == "")
 | 
						|
		{
 | 
						|
	%>
 | 
						|
		public override bool IsDirty
 | 
						|
		{
 | 
						|
			get { return base.IsDirty; }
 | 
						|
		}
 | 
						|
		public bool IsDirtyList(List<object> list)
 | 
						|
		{
 | 
						|
			return base.IsDirty;
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
	%>
 | 
						|
		public override bool IsDirty
 | 
						|
		{
 | 
						|
			get 
 | 
						|
			{
 | 
						|
				if ( base.IsDirty ) 
 | 
						|
					return true;
 | 
						|
				return IsDirtyList(new List<object>());
 | 
						|
			}
 | 
						|
		}
 | 
						|
		public bool IsDirtyList(List<object> list)
 | 
						|
		{
 | 
						|
			if (base.IsDirty || list.Contains(this))
 | 
						|
				return base.IsDirty;
 | 
						|
			list.Add(this);
 | 
						|
			return base.IsDirty<%=sExtension%>;
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
	}
 | 
						|
	private void vlnValid(string sExtension)
 | 
						|
	{
 | 
						|
		if(sExtension == "")
 | 
						|
		{
 | 
						|
	%>
 | 
						|
		public override bool IsValid
 | 
						|
		{
 | 
						|
			get { return (IsNew && !IsDirty) ? true : base.IsValid; }
 | 
						|
		}
 | 
						|
		public bool IsValidList(List<object> list)
 | 
						|
		{
 | 
						|
			return (IsNew && !IsDirty) ? true : base.IsValid;
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
	%>
 | 
						|
		public override bool IsValid
 | 
						|
		{
 | 
						|
			get { return IsValidList(new List<object>()); }
 | 
						|
		}
 | 
						|
		public bool IsValidList(List<object> list)
 | 
						|
		{
 | 
						|
			if(list.Contains(this))
 | 
						|
				return (IsNew && !IsDirty) ? true : base.IsValid;
 | 
						|
			list.Add(this);
 | 
						|
			return ((IsNew && !IsDirty) ? true : base.IsValid)<%=sExtension%>;
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
	}
 | 
						|
	private void vlnIdentity(IColumn column)
 | 
						|
	{
 | 
						|
		if (column.IsAutoKey)
 | 
						|
		{
 | 
						|
		string sProp=FormatColumn("{prop}",column);
 | 
						|
%>
 | 
						|
		private static int _next<%=sProp%> = -1;
 | 
						|
		public static int Next<%=sProp%>
 | 
						|
		{
 | 
						|
			get { return _next<%=sProp%>--; }
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
	}
 | 
						|
	private void vlnLazyLoad(string sType,string sMemberName,string sPropertyName,IForeignKey fk)
 | 
						|
	{
 | 
						|
		if (fk==null)return;
 | 
						|
		//if (OneToOne(fk.ForeignTable))return;
 | 
						|
		if (OneToOne(fk))return;
 | 
						|
		string sBy = FormatColumns("{name}",fk.ForeignColumns,"_","");
 | 
						|
		string sKeys=FormatColumns("{prop}",fk.PrimaryColumns,", ","");
 | 
						|
		string sRelClass=FKClassesName(fk) + GetAlias(fk);
 | 
						|
		string sClassName=MemberName(FKClassName(fk) + GetAlias(fk));//20070207
 | 
						|
%>
 | 
						|
				if (<%=sClassName%>Count < 0 || (<%=sClassName%>Count > 0 && <%=sMemberName%> == null))
 | 
						|
					<%=sMemberName%> = <%=sType%>.GetBy<%=sBy%>(<%=sKeys%>);
 | 
						|
				if (<%=sClassName%>Count < 0 )
 | 
						|
					<%=sClassName%>Count = <%=sMemberName%> == null ? 0 : <%=sMemberName%>.Count;
 | 
						|
				if (<%=sMemberName%> == null)
 | 
						|
					<%=sMemberName%> = <%=sRelClass%>.New();<%
 | 
						|
	}
 | 
						|
	private void vlnResetLazyLoad(string sType,string sMemberName,string sPropertyName,IForeignKey fk)
 | 
						|
	{
 | 
						|
		if (fk==null)return;
 | 
						|
		//if (OneToOne(fk.ForeignTable))return;
 | 
						|
		if (OneToOne(fk))return;
 | 
						|
		string sBy = FormatColumns("{name}",fk.ForeignColumns,"_","");
 | 
						|
		string sKeys=FormatColumns("{prop}",fk.PrimaryColumns,", ","");
 | 
						|
		string sRelClass=FKClassesName(fk) + GetAlias(fk);
 | 
						|
		string sClassName=MemberName(FKClassName(fk) + GetAlias(fk));//20070207
 | 
						|
%>
 | 
						|
		public void Reset<%=sMemberName%>()
 | 
						|
		{
 | 
						|
			<%=sClassName%>Count = -1;
 | 
						|
		}<%
 | 
						|
	}
 | 
						|
	private void vlnProperty(string sType,string sMemberName,string sPropertyName,string sDefault,string sDescription,bool bReadOnly,bool bPrimaryKey,bool bCompModel,IForeignKey fk,string sParentCheck,string sParentCheck2, string sParentCheck3)
 | 
						|
	{
 | 
						|
		string suffix = (sPropertyName==_className?"Fld":"");
 | 
						|
%>
 | 
						|
		private <%=ReturnType(sType)%> <%=sMemberName%><%=suffix%><%=sDefault%><%
 | 
						|
		if (!sDefault.EndsWith("timestamp")){
 | 
						|
		if (sDescription != ""){
 | 
						|
%>
 | 
						|
		/// <summary>
 | 
						|
		/// <%=sDescription%>
 | 
						|
		/// </summary><%
 | 
						|
		}
 | 
						|
		if (_chkPartCM && bCompModel)
 | 
						|
		{
 | 
						|
%>
 | 
						|
		[TypeConverter(typeof(<%=sType%>Converter))]<%
 | 
						|
		}
 | 
						|
		if (bPrimaryKey){
 | 
						|
%>
 | 
						|
		[System.ComponentModel.DataObjectField(true, true)]<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		public <%=ReturnType(sType)%> <%=sPropertyName%><%=suffix%>
 | 
						|
		{
 | 
						|
			[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
 | 
						|
			get
 | 
						|
			{
 | 
						|
				CanReadProperty("<%=sPropertyName%><%=suffix%>", true);<%vlnLazyLoad(sType,sMemberName,sPropertyName,fk);%><%=sParentCheck%>
 | 
						|
				return <%=sMemberName%><%=suffix%><%=ReturnMember(sType)%>;
 | 
						|
			}<%
 | 
						|
			if (!bReadOnly){  
 | 
						|
			switch(sType)
 | 
						|
				{
 | 
						|
					case "SmartDate":
 | 
						|
%>
 | 
						|
			[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
 | 
						|
			set
 | 
						|
			{
 | 
						|
				CanWriteProperty("<%=sPropertyName%><%=suffix%>", true);
 | 
						|
				if (value == null) value = string.Empty;
 | 
						|
				<%=sMemberName%><%=suffix%> = value;
 | 
						|
				try
 | 
						|
				{
 | 
						|
					SmartDate tmp = new SmartDate(value);
 | 
						|
					if (<%=sMemberName%><%=suffix%> != tmp.ToString())
 | 
						|
					{
 | 
						|
						<%=sMemberName%><%=suffix%> = tmp.ToString();
 | 
						|
						// CSLATODO: Any Cross Property Validation
 | 
						|
					}
 | 
						|
				}
 | 
						|
				catch
 | 
						|
				{
 | 
						|
				}
 | 
						|
				PropertyHasChanged();
 | 
						|
			}<%
 | 
						|
						break;
 | 
						|
					default:
 | 
						|
%>
 | 
						|
			[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
 | 
						|
			set
 | 
						|
			{
 | 
						|
				CanWriteProperty("<%=sPropertyName%><%=suffix%>", true);<%
 | 
						|
			if (sType=="string"){
 | 
						|
%>
 | 
						|
				if (value == null) value = string.Empty;<%
 | 
						|
			}
 | 
						|
			if(sParentCheck2 ==null) // 20080722RHM
 | 
						|
			{
 | 
						|
%>
 | 
						|
				if (<%=sMemberName%><%=suffix%> != value)<%
 | 
						|
			}
 | 
						|
			else// 20080722RHM
 | 
						|
			{
 | 
						|
%>
 | 
						|
				if (<%=sParentCheck3%>)<%
 | 
						|
			}
 | 
						|
%>
 | 
						|
				{
 | 
						|
					<%=sMemberName%><%=suffix%><%=ReturnMember(sType)%> = value;<%=sParentCheck2%>
 | 
						|
					PropertyHasChanged();
 | 
						|
				}
 | 
						|
			}<%
 | 
						|
						break;
 | 
						|
				}
 | 
						|
			}
 | 
						|
%>
 | 
						|
		}<%vlnResetLazyLoad(sType,sMemberName,sPropertyName,fk);%><%
 | 
						|
		}	
 | 
						|
 | 
						|
	}
 | 
						|
	private void vlnToString(IColumns Columns)
 | 
						|
	{
 | 
						|
%>
 | 
						|
		// CSLATODO: Replace base <%=_className%>.ToString function as necessary
 | 
						|
		/// <summary>
 | 
						|
		/// Overrides Base ToString
 | 
						|
		/// </summary>
 | 
						|
		/// <returns>A string representation of current <%=_className%></returns>
 | 
						|
		//public override string ToString()
 | 
						|
		//{
 | 
						|
		//  return base.ToString();
 | 
						|
		//}<%
 | 
						|
	}
 | 
						|
	private void vlnGetIDValue(IColumns Columns)
 | 
						|
	{
 | 
						|
		string keyID="";
 | 
						|
		string sep="(";
 | 
						|
		if (Columns.Count==1){
 | 
						|
			keyID=MemberName(Columns[0]);
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			foreach(IColumn field in Columns)
 | 
						|
			{
 | 
						|
				keyID+=sep+MemberName(field)+ ".ToString()";
 | 
						|
				sep=" + \".\" + ";
 | 
						|
			}
 | 
						|
			keyID+=").GetHashCode()";
 | 
						|
		}
 | 
						|
%>
 | 
						|
		// CSLATODO: Check <%=_className%>.GetIdValue to assure that the ID returned is unique
 | 
						|
		/// <summary>
 | 
						|
		/// Overrides Base GetIdValue - Used internally by CSLA to determine equality
 | 
						|
		/// </summary>
 | 
						|
		/// <returns>A Unique ID for the current <%=_className%></returns>
 | 
						|
		protected override object GetIdValue()
 | 
						|
		{
 | 
						|
			return My<%=_className%>Unique; // Absolutely Unique ID
 | 
						|
		}<%
 | 
						|
	}
 | 
						|
	private string extName
 | 
						|
	{
 | 
						|
		get {return _className + "Extension";}
 | 
						|
	}
 | 
						|
	private string extMName
 | 
						|
	{
 | 
						|
		get {return MemberName(_className + "Extension");}
 | 
						|
	}
 | 
						|
	private void vlnValidationRules(IColumns Columns )
 | 
						|
	{
 | 
						|
%>
 | 
						|
		#region ValidationRules
 | 
						|
		[NonSerialized]
 | 
						|
		private bool _CheckingBrokenRules = false;
 | 
						|
		public IVEHasBrokenRules HasBrokenRules
 | 
						|
		{<%=Debug("20070509.vlnValidationRules")%>
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if (_CheckingBrokenRules) return null;
 | 
						|
				if ((IsDirty || !IsNew) && BrokenRulesCollection.Count > 0) return this;
 | 
						|
				try
 | 
						|
				{
 | 
						|
					_CheckingBrokenRules = true;
 | 
						|
					IVEHasBrokenRules hasBrokenRules = null;<%
 | 
						|
				vlnBrokenRuleObjects(Columns);
 | 
						|
%>
 | 
						|
					return hasBrokenRules;
 | 
						|
				}
 | 
						|
				finally
 | 
						|
				{
 | 
						|
					_CheckingBrokenRules = false;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		public BrokenRulesCollection BrokenRules
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				IVEHasBrokenRules hasBrokenRules = HasBrokenRules;
 | 
						|
				if (this.Equals(hasBrokenRules)) return BrokenRulesCollection;
 | 
						|
				return (hasBrokenRules != null ? hasBrokenRules.BrokenRules : null);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		protected override void AddBusinessRules()
 | 
						|
		{<%
 | 
						|
		foreach(IColumn field in Columns)
 | 
						|
		{
 | 
						|
			if (field.LanguageType=="string")
 | 
						|
			{
 | 
						|
				vlnAddRequired(field);
 | 
						|
				if (field.CharacterMaxLength < 2147483647)
 | 
						|
				vlnAddMaxLength(PropertyName(field),field.CharacterMaxLength);
 | 
						|
			}
 | 
						|
			if (CSLAType( field )=="SmartDate")
 | 
						|
			{
 | 
						|
				vlnAddRequired(field);
 | 
						|
				string sName = PropertyName(field);
 | 
						|
%>
 | 
						|
			ValidationRules.AddRule<<%=_className%>>(<%=sName%>Valid, "<%=sName%>");<%
 | 
						|
			}
 | 
						|
				string sObjectRequired = RequiredRelatedColumn(field);
 | 
						|
				if (sObjectRequired != null)
 | 
						|
				{
 | 
						|
%>
 | 
						|
			ValidationRules.AddRule<<%=_className%>>(<%=sObjectRequired%>Required, "<%=sObjectRequired%>");<%
 | 
						|
				}
 | 
						|
		}
 | 
						|
%>
 | 
						|
			//ValidationRules.AddDependantProperty("x", "y");
 | 
						|
			<%=extMName%>.AddValidationRules(ValidationRules);
 | 
						|
			// CSLATODO:  Add other validation rules
 | 
						|
		}
 | 
						|
		protected override void AddInstanceBusinessRules()
 | 
						|
		{
 | 
						|
			<%=extMName%>.AddInstanceValidationRules(ValidationRules);
 | 
						|
			// CSLATODO:  Add other validation rules
 | 
						|
		}<%
 | 
						|
		foreach(IColumn field in Columns)
 | 
						|
		{
 | 
						|
			if (CSLAType( field )=="SmartDate")
 | 
						|
			{
 | 
						|
				string sName = PropertyName(field);
 | 
						|
				string sMember = MemberName(field);
 | 
						|
%>
 | 
						|
		private static bool <%=sName%>Valid(<%=_className%> target, Csla.Validation.RuleArgs e)
 | 
						|
		{
 | 
						|
			try
 | 
						|
			{
 | 
						|
				DateTime tmp = SmartDate.StringToDate(target.<%=sMember%>);
 | 
						|
			}
 | 
						|
			catch
 | 
						|
			{
 | 
						|
				e.Description = "Invalid Date";
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
			return true;
 | 
						|
		}<%
 | 
						|
			}
 | 
						|
		}
 | 
						|
		foreach(IColumn col in Columns)
 | 
						|
		{
 | 
						|
			string sColumn = RequiredRelatedColumn(col);
 | 
						|
			if (sColumn != null){ // Let the Validation Rules handle required fields
 | 
						|
				string sMemberRaw = MemberName(col);
 | 
						|
				string sMemberReq = MemberName(sColumn);
 | 
						|
%>
 | 
						|
		private static bool <%=sColumn%>Required(<%=_className%> target, Csla.Validation.RuleArgs e)
 | 
						|
		{
 | 
						|
			if (target.<%=sMemberRaw%> == 0 && target.<%=sMemberReq%> == null) // Required field missing
 | 
						|
			{
 | 
						|
				e.Description = "Required";
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
			return true;
 | 
						|
		}<%
 | 
						|
				
 | 
						|
			}
 | 
						|
		}
 | 
						|
%>
 | 
						|
		// Sample data comparison validation rule
 | 
						|
		//private bool StartDateGTEndDate(object target, Csla.Validation.RuleArgs e)
 | 
						|
		//{
 | 
						|
		//	if (_started > _ended)
 | 
						|
		//	{
 | 
						|
		//		e.Description = "Start date can't be after end date";
 | 
						|
		//		return false;
 | 
						|
		//	}
 | 
						|
		//	else
 | 
						|
		//		return true;
 | 
						|
		//}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnAddRequired(IColumn column)
 | 
						|
	{
 | 
						|
		string sName = PropertyName(column);
 | 
						|
		if (!column.IsNullable)
 | 
						|
		{
 | 
						|
%>
 | 
						|
			ValidationRules.AddRule(
 | 
						|
				Csla.Validation.CommonRules.StringRequired, "<%=sName%>");<%	
 | 
						|
		}
 | 
						|
	}
 | 
						|
	private void vlnAddMaxLength(string sName,int maxlen)
 | 
						|
	{
 | 
						|
%>
 | 
						|
			ValidationRules.AddRule(
 | 
						|
				Csla.Validation.CommonRules.StringMaxLength,
 | 
						|
				new Csla.Validation.CommonRules.MaxLengthRuleArgs("<%=sName%>", <%=maxlen.ToString()%>));<%	}
 | 
						|
	private void vlnAuthorizationRules(IColumns Columns )
 | 
						|
	{
 | 
						|
%>
 | 
						|
		#region Authorization Rules
 | 
						|
		protected override void AddAuthorizationRules()
 | 
						|
		{
 | 
						|
			//CSLATODO: Who can read/write which fields<%
 | 
						|
		foreach(IColumn field in Columns)
 | 
						|
		{
 | 
						|
			if (field.DataTypeName != "timestamp"){
 | 
						|
%>
 | 
						|
			//AuthorizationRules.AllowRead(<%=PropertyName(field)%>, "<Role(s)>");<%			
 | 
						|
			}
 | 
						|
		}
 | 
						|
		foreach(IColumn field in Columns)
 | 
						|
		{
 | 
						|
			if (!(field.IsInPrimaryKey || field.IsAutoKey || field.IsComputed))
 | 
						|
			{
 | 
						|
%>
 | 
						|
			//AuthorizationRules.AllowWrite(<%=PropertyName(field)%>, "<Role(s)>");<%			
 | 
						|
			}
 | 
						|
		}
 | 
						|
%>
 | 
						|
			<%=extMName%>.AddAuthorizationRules(AuthorizationRules);
 | 
						|
		}
 | 
						|
		protected override void AddInstanceAuthorizationRules()
 | 
						|
		{
 | 
						|
			//CSLATODO: Who can read/write which fields
 | 
						|
			<%=extMName%>.AddInstanceAuthorizationRules(AuthorizationRules);
 | 
						|
		}
 | 
						|
		public static bool CanAddObject()
 | 
						|
		{
 | 
						|
			// CSLATODO: Can Add Authorization
 | 
						|
			//return Csla.ApplicationContext.User.IsInRole("ProjectManager");
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
		public static bool CanGetObject()
 | 
						|
		{
 | 
						|
			// CSLATODO: CanGet Authorization
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
		public static bool CanDeleteObject()
 | 
						|
		{
 | 
						|
			// CSLATODO: CanDelete Authorization
 | 
						|
			//bool result = false;
 | 
						|
			//if (Csla.ApplicationContext.User.IsInRole("ProjectManager"))result = true;
 | 
						|
			//if (Csla.ApplicationContext.User.IsInRole("Administrator"))result = true;
 | 
						|
			//return result;
 | 
						|
			return true;
 | 
						|
		}<%
 | 
						|
		// Need logic to Add CanDelete if the items contains any related records
 | 
						|
		// Get a list of related objects
 | 
						|
		string sRelatedCounts = "";
 | 
						|
		string sRelatedCounts1 = "";
 | 
						|
		// Loop through Foreign Keys associated with the Primary Key
 | 
						|
		foreach(IForeignKey fk in _workingTable.ForeignKeys)
 | 
						|
		{
 | 
						|
			if (fk.PrimaryTable == _workingTable)
 | 
						|
			{
 | 
						|
				bool isPrimary = true;
 | 
						|
				foreach(IColumn c in fk.PrimaryColumns)
 | 
						|
				{
 | 
						|
					isPrimary &= c.IsInPrimaryKey;
 | 
						|
				}
 | 
						|
				if (isPrimary)
 | 
						|
				{
 | 
						|
					if (fk.PrimaryTable == fk.ForeignTable)
 | 
						|
					{
 | 
						|
						sRelatedCounts1 += "\r\n\t\t\t\tusedByCount += " + MemberName(FKClassName1(fk)) + "Count;";
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						sRelatedCounts += "\r\n\t\t\t\tusedByCount += " + MemberName(FKClassName1(fk)) + "Count;";
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		sRelatedCounts += sRelatedCounts1;
 | 
						|
		if (sRelatedCounts != "")
 | 
						|
		{
 | 
						|
%>
 | 
						|
		/// <summary>
 | 
						|
		/// determines if related records (Foreign Keys) will keep this Item from being deleted
 | 
						|
		/// </summary>
 | 
						|
		public bool CanDelete
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				// Check to make sure that there are not any related records
 | 
						|
				int usedByCount = 0;<%=sRelatedCounts%>
 | 
						|
				return (usedByCount == 0);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		public static bool CanEditObject()
 | 
						|
		{
 | 
						|
			// CSLATODO: CanEdit Authorization
 | 
						|
			//return Csla.ApplicationContext.User.IsInRole("ProjectManager");
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private bool MatchingColumns(IList cols1,IList cols2)
 | 
						|
	{
 | 
						|
		if (cols1.Count != cols2.Count)return false;
 | 
						|
		ArrayList cols=new ArrayList();
 | 
						|
		foreach(IColumn col in cols1)cols.Add(col.Name);
 | 
						|
		foreach(IColumn col in cols2)cols.Remove(col.Name);
 | 
						|
		return cols.Count==0;
 | 
						|
	}
 | 
						|
	private void vlnFactoryMethods(IColumns Columns )
 | 
						|
	{
 | 
						|
		string pKeys=FormatColumns("{prop}.ToString()",_workingTable.PrimaryKeys," + \"_\" + ");
 | 
						|
		string sKeys=FormatColumns("{local}",_workingTable.PrimaryKeys,", ");
 | 
						|
		string sKeysTypes=FormatColumns("{ctype} {local}",_workingTable.PrimaryKeys,", ");;
 | 
						|
		ArrayList reqList = ReqList(Columns);
 | 
						|
		ArrayList makeList = MakeList(Columns);
 | 
						|
		ArrayList makeList2 = MakeList2(Columns);
 | 
						|
		ArrayList makeList3 = MakeList3(Columns);
 | 
						|
		ArrayList makeList4 = MakeList4(Columns);
 | 
						|
		Hashtable dicCheck = new Hashtable();
 | 
						|
		IForeignKey fkParent = FKParentFK(_workingTable);
 | 
						|
		string sParent = ParentName(fkParent);
 | 
						|
		dicCheck["DateTime"]=
 | 
						|
			"if ({local} >= new DateTime(1753, 1, 1) && {local} <= new DateTime(9999, 12, 31)) tmp.{prop} = {local};";
 | 
						|
		dicCheck["DateTime?"]=
 | 
						|
			"if ({local} != null && ((DateTime){local}) >= new DateTime(1753, 1, 1) && ((DateTime){local}) <= new DateTime(9999, 12, 31)) tmp.{prop} = {local};";
 | 
						|
		dicCheck["string"]=
 | 
						|
			"if ({local} != null && {local} != string.Empty) tmp.{prop} = {local};";
 | 
						|
%>
 | 
						|
		#region Factory Methods
 | 
						|
		public int CurrentEditLevel
 | 
						|
		{ get { return EditLevel; } }
 | 
						|
		private static int _<%=_className%>Unique = 0;
 | 
						|
		protected static int <%=_className%>Unique
 | 
						|
		{ get { return ++_<%=_className%>Unique; } }
 | 
						|
		private int _My<%=_className%>Unique = <%=_className%>Unique;
 | 
						|
		public int My<%=_className%>Unique // Absolutely Unique ID - Editable
 | 
						|
		{ get { return _My<%=_className%>Unique; } }
 | 
						|
		protected <%=_className%>()
 | 
						|
		{/* require use of factory methods */
 | 
						|
			AddToCache(this);
 | 
						|
		}
 | 
						|
		private bool _Disposed = false;
 | 
						|
		private static int _CountCreated = 0;
 | 
						|
		private static int _CountDisposed = 0;
 | 
						|
		private static int _CountFinalized = 0;
 | 
						|
		private static int IncrementCountCreated
 | 
						|
		{ get { return ++_CountCreated; } }
 | 
						|
		private int _CountWhenCreated = IncrementCountCreated;
 | 
						|
		public static int CountCreated
 | 
						|
		{ get { return _CountCreated; } }
 | 
						|
		public static int CountNotDisposed
 | 
						|
		{ get { return _CountCreated - _CountDisposed; } }
 | 
						|
		public static int CountNotFinalized
 | 
						|
		{ get { return _CountCreated - _CountFinalized; } }
 | 
						|
		~<%=_className%>()
 | 
						|
		{
 | 
						|
			_CountFinalized++;
 | 
						|
		}
 | 
						|
		public void Dispose()
 | 
						|
		{
 | 
						|
			if (_Disposed) return;
 | 
						|
			_CountDisposed++;
 | 
						|
			_Disposed = true;
 | 
						|
			RemoveFromDictionaries();
 | 
						|
		}
 | 
						|
		private void RemoveFromDictionaries()
 | 
						|
		{
 | 
						|
			RemoveFromCache(this);
 | 
						|
			if (_CacheByPrimaryKey.ContainsKey(<%=pKeys%>))
 | 
						|
			{
 | 
						|
				List<<%=_className%>> list<%=_className%> = _CacheByPrimaryKey[<%=pKeys%>]; // Get the list of items
 | 
						|
				while (list<%=_className%>.Contains(this)) list<%=_className%>.Remove(this); // Remove the item from the list
 | 
						|
				if (list<%=_className%>.Count == 0) //If there are no items left in the list
 | 
						|
					_CacheByPrimaryKey.Remove(<%=pKeys%>); // remove the list
 | 
						|
			}<%
 | 
						|
				
 | 
						|
		ArrayList uniqueIndexes=UniqueIndexes(_workingTable);
 | 
						|
		IIndex makeIndex=null;
 | 
						|
		if(uniqueIndexes.Count > 0)
 | 
						|
		{
 | 
						|
%>
 | 
						|
			string myKey;<%
 | 
						|
		}
 | 
						|
		foreach(IIndex ind in uniqueIndexes)
 | 
						|
		{
 | 
						|
			string sBy = FormatColumns("{name}",ind.Columns,"_","");
 | 
						|
			string sKey = FormatColumns("{prop}.ToString()",ind.Columns," + \"_\" + ","");
 | 
						|
			if (MatchingColumns(ind.Columns,makeList))makeIndex=ind;
 | 
						|
%>
 | 
						|
			myKey = null;
 | 
						|
			foreach (string key in _CacheBy<%=sBy%>.Keys)
 | 
						|
				if (_CacheBy<%=sBy%>[key].Contains(this))
 | 
						|
					myKey = key;
 | 
						|
			if (myKey != null)
 | 
						|
			{
 | 
						|
				List<<%=_className%>> list<%=_className%> = _CacheBy<%=sBy%>[myKey]; // Get the list of items
 | 
						|
				list<%=_className%>.Remove(this); // Remove the item from the list
 | 
						|
				if (list<%=_className%>.Count == 0) //If there are no items left in the list
 | 
						|
					_CacheBy<%=sBy%>.Remove(myKey); // remove the list
 | 
						|
			}<%
 | 
						|
		}
 | 
						|
		string sMakeListParamTypes = "";
 | 
						|
		string sMakeListParams = "";
 | 
						|
		string sSetTmp = "";
 | 
						|
		string sParentCheck = "";
 | 
						|
%>
 | 
						|
		}
 | 
						|
		public static <%=_className%> New()
 | 
						|
		{
 | 
						|
			if (!CanAddObject())
 | 
						|
				throw new System.Security.SecurityException("User not authorized to add a <%=_className%>");
 | 
						|
			try
 | 
						|
			{
 | 
						|
				return DataPortal.Create<<%=_className%>>();
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				throw new DbCslaException("Error on <%=_className%>.New", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
		// if makelist != reqlist create a new for reqlist
 | 
						|
		if (!SameList(makeList,reqList) && reqList.Count > 0)
 | 
						|
		{
 | 
						|
			BuildLists(reqList,ref sMakeListParamTypes, ref sMakeListParams, ref sSetTmp, ref sParentCheck);
 | 
						|
			BuildNew(sMakeListParamTypes,sMakeListParams,sSetTmp,sParentCheck);	
 | 
						|
			if(SameList(reqList,makeList4))
 | 
						|
				BuildMake(sMakeListParamTypes,sMakeListParams,sSetTmp,sParentCheck + Debug("20070427.4"),makeIndex);
 | 
						|
		}
 | 
						|
		BuildLists(makeList,ref sMakeListParamTypes, ref sMakeListParams, ref sSetTmp, ref sParentCheck);		
 | 
						|
		BuildNew(sMakeListParamTypes,sMakeListParams,sSetTmp,sParentCheck );		
 | 
						|
		BuildMake(sMakeListParamTypes,sMakeListParams,sSetTmp,sParentCheck + Debug("20070427.3"),makeIndex);
 | 
						|
		if (!SameList(makeList,makeList4) && !SameList(reqList,makeList4) && makeList4.Count > 0)
 | 
						|
		{
 | 
						|
			BuildLists(makeList4,ref sMakeListParamTypes, ref sMakeListParams, ref sSetTmp, ref sParentCheck);		
 | 
						|
			BuildNew(sMakeListParamTypes,sMakeListParams,sSetTmp,sParentCheck);		
 | 
						|
			BuildMake(sMakeListParamTypes,sMakeListParams,sSetTmp,sParentCheck + Debug("20070427.4"),makeIndex);
 | 
						|
		}
 | 
						|
	if (makeList3.Count > 0)
 | 
						|
		{
 | 
						|
%>
 | 
						|
		public static <%=_className%> Make<%=_className%>(<%=FormatColumns("{rtype} {local}",makeList2,", ","")%>)
 | 
						|
		{<%=DebugLine("20070427.1")%>
 | 
						|
			<%=_className%> tmp = <%=_className%>.New(<%=FormatColumns("{local}",makeList,", ","")%>);
 | 
						|
<%=FormatColumns(dicCheck,makeList3,"\r\n","\t\t\t")%>
 | 
						|
			return tmp.Save();
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
		string sExtra1= "";
 | 
						|
		string sExtra2= "";
 | 
						|
		if (FKParent(_workingTable)){
 | 
						|
			sExtra1=", " + _className + " " + ParentName(fkParent).ToLower();
 | 
						|
			sExtra2=", " + ParentName(fkParent).ToLower();
 | 
						|
		}
 | 
						|
		if (OneToOne(_workingTable) && !SameList(makeList,_workingTable.PrimaryKeys) && !SameList(reqList,_workingTable.PrimaryKeys) && !SameList(makeList4,_workingTable.PrimaryKeys))
 | 
						|
		{
 | 
						|
			BuildLists(_workingTable.PrimaryKeys,ref sMakeListParamTypes, ref sMakeListParams, ref sSetTmp, ref sParentCheck);		
 | 
						|
			sSetTmp += "\r\n\t\t\ttmp.MarkClean();";
 | 
						|
			sSetTmp += "\r\n\t\t\ttmp.MarkAsChild();";
 | 
						|
			BuildNew(sMakeListParamTypes,sMakeListParams,sSetTmp,sParentCheck);		
 | 
						|
		}
 | 
						|
%>
 | 
						|
		public static <%=_className%> Get(<%=sKeysTypes%>)
 | 
						|
		{
 | 
						|
			if (!CanGetObject())
 | 
						|
				throw new System.Security.SecurityException("User not authorized to view a <%=_className%>");
 | 
						|
			try
 | 
						|
			{
 | 
						|
				<%=_className%> tmp = GetCachedByPrimaryKey(<%=sKeys%>);
 | 
						|
				if (tmp == null)
 | 
						|
				{
 | 
						|
					tmp = DataPortal.Fetch<<%=_className%>>(new PKCriteria(<%=sKeys%>));
 | 
						|
					AddToCache(tmp);
 | 
						|
				}
 | 
						|
				if (tmp.ErrorMessage == "No Record Found") 
 | 
						|
				{
 | 
						|
					tmp.Dispose(); // Clean-up <%=_className%>
 | 
						|
					tmp = null;
 | 
						|
				}
 | 
						|
				return tmp;
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				throw new DbCslaException("Error on <%=_className%>.Get", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
		//IForeignKey fkParent = FKParentFK(_workingTable);
 | 
						|
		if (fkParent != null && _doOldParent)
 | 
						|
		{
 | 
						|
			string parKeys = FormatColumns("{member}",fkParent.ForeignColumns,", ");
 | 
						|
%>
 | 
						|
		public <%=_className%> Get<%=sParent%>()
 | 
						|
		{
 | 
						|
			if (!CanGetObject())
 | 
						|
				throw new System.Security.SecurityException("User not authorized to view a <%=_className%>");
 | 
						|
			try
 | 
						|
			{
 | 
						|
				<%=_className%> tmp = GetCachedByPrimaryKey(<%=parKeys%>);
 | 
						|
				if (tmp == null)
 | 
						|
				{
 | 
						|
					tmp = DataPortal.Fetch<<%=_className%>>(new <%=sParent%>Criteria(<%=parKeys%>));
 | 
						|
					AddToCache(tmp);
 | 
						|
				}
 | 
						|
				if (tmp.ErrorMessage == "No Record Found")
 | 
						|
				{
 | 
						|
					tmp.Dispose(); // Clean-up <%=_className%>
 | 
						|
					tmp = null;
 | 
						|
				}
 | 
						|
				return tmp;
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				throw new DbCslaException("Error on <%=_className%>.Get", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
//  GetByUniqueIndex() 
 | 
						|
		foreach(IIndex ind in uniqueIndexes)
 | 
						|
		{
 | 
						|
			string sBy = FormatColumns("{name}",ind.Columns,"_","");
 | 
						|
			string sKeyType = FormatColumns("{ctype} {local}",ind.Columns,", ","");
 | 
						|
			string sKey = FormatColumns("{local}",ind.Columns,", ","");
 | 
						|
%>
 | 
						|
		public static <%=_className%> GetBy<%=sBy%>(<%=sKeyType%>)
 | 
						|
		{
 | 
						|
			if (!CanGetObject())
 | 
						|
				throw new System.Security.SecurityException("User not authorized to view a <%=_className%>");
 | 
						|
			try
 | 
						|
			{
 | 
						|
				<%=_className%> tmp = GetCachedBy<%=sBy%>(<%=sKey%>);
 | 
						|
				if (tmp == null)
 | 
						|
				{
 | 
						|
					tmp = DataPortal.Fetch<<%=_className%>>(new <%=sBy%>Criteria(<%=sKey%>));
 | 
						|
					AddToCache(tmp);
 | 
						|
				}
 | 
						|
				if (tmp.ErrorMessage == "No Record Found") 
 | 
						|
				{
 | 
						|
					tmp.Dispose(); // Clean-up <%=_className%>
 | 
						|
					tmp = null;
 | 
						|
				}
 | 
						|
				return tmp;
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				throw new DbCslaException("Error on <%=_className%>.GetBy<%=sBy%>", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		public static <%=_className%> Get(SafeDataReader dr<%=sExtra1%>)
 | 
						|
		{
 | 
						|
			if (dr.Read()) return new <%=_className%>(dr<%=sExtra2%>);
 | 
						|
			return null;
 | 
						|
		}
 | 
						|
		internal <%=_className%>(SafeDataReader dr)
 | 
						|
		{
 | 
						|
			ReadData(dr);
 | 
						|
		}<%
 | 
						|
		if (FKParent(_workingTable)){
 | 
						|
%>
 | 
						|
		private <%=_className%>(SafeDataReader dr<%=sExtra1%>)
 | 
						|
		{
 | 
						|
			ReadData(dr);
 | 
						|
			MarkAsChild();
 | 
						|
		}
 | 
						|
		internal <%=_className%>(SafeDataReader dr, int parentID)
 | 
						|
		{
 | 
						|
			ReadData(dr);
 | 
						|
			MarkAsChild();
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		public static void Delete(<%=sKeysTypes%>)
 | 
						|
		{
 | 
						|
			if (!CanDeleteObject())
 | 
						|
				throw new System.Security.SecurityException("User not authorized to remove a <%=_className%>");
 | 
						|
			try
 | 
						|
			{
 | 
						|
				DataPortal.Delete(new PKCriteria(<%=sKeys%>));
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				throw new DbCslaException("Error on <%=_className%>.Delete", ex);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		public override <%=_className%> Save()
 | 
						|
		{
 | 
						|
			if (IsDeleted && !CanDeleteObject())
 | 
						|
				throw new System.Security.SecurityException("User not authorized to remove a <%=_className%>");
 | 
						|
			else if (IsNew && !CanAddObject())
 | 
						|
				throw new System.Security.SecurityException("User not authorized to add a <%=_className%>");
 | 
						|
			else if (!CanEditObject())
 | 
						|
				throw new System.Security.SecurityException("User not authorized to update a <%=_className%>");
 | 
						|
			try
 | 
						|
			{
 | 
						|
				BuildRefreshList();
 | 
						|
				<%=_className%> <%=LocalName(_className)%> = base.Save();
 | 
						|
				RemoveFromDictionaries(); // if save is successful remove the previous Folder from the cache
 | 
						|
				AddToCache(<%=LocalName(_className)%>);//Refresh the item in AllList
 | 
						|
				ProcessRefreshList();
 | 
						|
				return <%=LocalName(_className)%>;
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				throw new DbCslaException("Error on CSLA Save", ex);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void BuildNew(string sMakeListParamTypes, string sMakeListParams, string sSetTmp, string sParentCheck)
 | 
						|
	{
 | 
						|
	%>
 | 
						|
		public static <%=_className%> New(<%=sMakeListParamTypes%>)
 | 
						|
		{
 | 
						|
			<%=_className%> tmp = <%=_className%>.New();
 | 
						|
<%=sSetTmp%>
 | 
						|
			return tmp;
 | 
						|
		}<%
 | 
						|
	}
 | 
						|
	private void BuildMake(string sMakeListParamTypes, string sMakeListParams, string sSetTmp, string sParentCheck,IIndex makeIndex)
 | 
						|
	{
 | 
						|
	%>
 | 
						|
		public static <%=_className%> Make<%=_className%>(<%=sMakeListParamTypes%>)
 | 
						|
		{<%=DebugLine("20070427.2")%><%
 | 
						|
		if (makeIndex != null)
 | 
						|
		{
 | 
						|
%>
 | 
						|
			<%=_className%> tmp = null;
 | 
						|
			<%=sParentCheck%>tmp = GetBy<%=FormatColumns("{prop}",makeIndex.Columns,"_","")%>(<%=FormatColumns("{!localcolumn}",makeIndex.Columns,", ","")%>);
 | 
						|
			if (tmp != null) return tmp;// It does exist, return it.
 | 
						|
			tmp = <%=_className%>.New(<%=sMakeListParams%>);<%
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
%>
 | 
						|
			<%=_className%> tmp = <%=_className%>.New(<%=sMakeListParams%>);<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
			if (tmp.IsSavable)
 | 
						|
				tmp = tmp.Save();
 | 
						|
			else
 | 
						|
			{
 | 
						|
				Csla.Validation.BrokenRulesCollection brc = tmp.ValidationRules.GetBrokenRules();
 | 
						|
				tmp._ErrorMessage = "Failed Validation:";
 | 
						|
				foreach (Csla.Validation.BrokenRule br in brc)
 | 
						|
				{
 | 
						|
					tmp._ErrorMessage += "\r\n\tFailure: " + br.RuleName;
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return tmp;
 | 
						|
		}<%
 | 
						|
	}
 | 
						|
	private void vlnRefreshInfo()
 | 
						|
	{
 | 
						|
		string sClass = ClassName(_workingTable);
 | 
						|
		string sClasses = ClassesName(_workingTable);
 | 
						|
		string sDeclare = "\t\tprivate List<" + sClass + "> _Refresh" + sClasses + " = new List<" + sClass + ">();";
 | 
						|
		string sReset = "\t\t\t_Refresh" + sClasses + " = new List<" + sClass + ">();";
 | 
						|
		string sCheck = "\t\t\tif (IsDirty)\r\n\t\t\t\trefresh" + sClasses + ".Add(this);";
 | 
						|
		string sRefreshDeclare = "List<" + sClass + "> refresh" + sClasses;
 | 
						|
		string sRefreshRelated = "refresh" + sClasses;
 | 
						|
		string sRefreshRelated1 = "_Refresh" + sClasses;
 | 
						|
		string sProcess = "\t\t\tforeach (" + sClass + " tmp in _Refresh" + sClasses + ")\r\n\t\t\t{\r\n\t\t\t\t" +
 | 
						|
			sClass + "Info.Refresh(tmp);";
 | 
						|
		foreach(IForeignKey fk in _workingTable.ForeignKeys) // 20070220
 | 
						|
		{
 | 
						|
			if (_workingTable != fk.PrimaryTable && IsPrimaryKey1(fk) && !IsPrimaryKey(fk))
 | 
						|
			{
 | 
						|
				sProcess += string.Format("\r\n\t\t\t\tif (tmp._My{1} != null) {0}Info.Refresh(tmp._My{1});",ClassName(fk.PrimaryTable.Name),ClassName(fk.PrimaryTable.Name) + GetNewAlias(fk,fk));
 | 
						|
			}
 | 
						|
		}
 | 
						|
		sProcess += "\r\n\t\t\t}";
 | 
						|
		Hashtable dicAlias = new Hashtable();		
 | 
						|
		foreach(IForeignKey fk in _workingTable.ForeignKeys) // 20070220
 | 
						|
		{
 | 
						|
			if (fk.PrimaryTable == fk.ForeignTable) // Parent Child
 | 
						|
			{
 | 
						|
				sCheck += "\r\n\t\t\tif (_" + ChildName(fk) + sClasses + " != null && _" + ChildName(fk) + sClasses + ".IsDirty)\r\n\t\t\t{\r\n\t\t\t\tforeach (" + sClass +
 | 
						|
					" tmp in _" + ChildName(fk) + sClasses + ")\r\n\t\t\t\t{\r\n\t\t\t\t\ttmp.AddToRefreshList(" +
 | 
						|
					"{{refreshRelated}});\r\n\t\t\t\t}\r\n\t\t\t}";
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				if (!IsPrimaryKey(fk) && _workingTable == fk.PrimaryTable){
 | 
						|
					//string sAlias = GetAlias(dicAlias,fk.ForeignTable);
 | 
						|
					string sAlias = GetAlias(fk);
 | 
						|
					string sItem = ClassName(fk.ForeignTable);
 | 
						|
					string sFItem = ClassName(_workingTable) + ClassName(fk.ForeignTable) + sAlias;
 | 
						|
					string sFItems = ClassName(_workingTable) + ClassesName(fk.ForeignTable) + sAlias;
 | 
						|
					sDeclare += "\r\n\t\tprivate List<" + sFItem + "> _Refresh" + sFItems + " = new List<" + sFItem + ">();";
 | 
						|
					sReset += "\r\n\t\t\t_Refresh" + sFItems + " = new List<" + sFItem + ">();";
 | 
						|
					sRefreshRelated += ", refresh" + sFItems;
 | 
						|
					sRefreshRelated1 += ", _Refresh" + sFItems;
 | 
						|
					sRefreshDeclare += ", List<" + sFItem + "> refresh" + sFItems;
 | 
						|
					sCheck += "\r\n\t\t\tif (" + MemberName(sFItems) + " != null && " + MemberName(sFItems) + ".IsDirty)\r\n\t\t\t{\r\n\t\t\t\tforeach (" + sFItem +
 | 
						|
						" tmp in " + MemberName(sFItems) + ")\r\n\t\t\t\t{\r\n\t\t\t\t\tif (tmp.IsDirty) refresh" + sFItems +
 | 
						|
						".Add(tmp);\r\n\t\t\t\t}\r\n\t\t\t}";
 | 
						|
					sProcess += "\r\n\t\t\tforeach (" + sFItem + " tmp in _Refresh" + sFItems + ")\r\n\t\t\t{\r\n\t\t\t\t" +
 | 
						|
						sItem + "Info.Refresh(" + (ForeignPrimary(fk)?"this, ":"") + "tmp);\r\n\t\t\t}";
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		sCheck = sCheck.Replace("{{refreshRelated}}",sRefreshRelated);
 | 
						|
%>
 | 
						|
		#region Refresh
 | 
						|
<%=sDeclare%>
 | 
						|
		private void AddToRefreshList(<%=sRefreshDeclare%>)
 | 
						|
		{
 | 
						|
<%=sCheck%>
 | 
						|
		}
 | 
						|
		private void ClearRefreshList()
 | 
						|
		{
 | 
						|
<%=sReset%>
 | 
						|
		}
 | 
						|
		private void BuildRefreshList()
 | 
						|
		{
 | 
						|
			ClearRefreshList();
 | 
						|
			AddToRefreshList(<%=sRefreshRelated1%>);
 | 
						|
		}
 | 
						|
		private void ProcessRefreshList()
 | 
						|
		{
 | 
						|
<%=sProcess%>
 | 
						|
			ClearRefreshList();
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void ReadOnlyProperties(IColumns columns)
 | 
						|
	{
 | 
						|
		output.write(FormatColumns("\t\t\tprivate {ctype} {member};\r\n" +
 | 
						|
			"\t\t\tpublic {ctype} {prop}\r\n\t\t\t{ get { return {member}; } }"
 | 
						|
			,columns,"\r\n"));
 | 
						|
	}
 | 
						|
	private void vlnPKCriteria()
 | 
						|
	{
 | 
						|
// PKCriteria
 | 
						|
%>
 | 
						|
		[Serializable()]
 | 
						|
		protected class PKCriteria
 | 
						|
		{
 | 
						|
<%
 | 
						|
// Loop through Primary Keys
 | 
						|
//		string sep="";
 | 
						|
		string sValues=FormatColumns("\t\t\t\t{member} = {local};",_workingTable.PrimaryKeys,"\r\n");
 | 
						|
		string sKeysTypes=FormatColumns("{ctype} {local}",_workingTable.PrimaryKeys,", ");
 | 
						|
//		foreach(IColumn field in _workingTable.PrimaryKeys)
 | 
						|
//		{
 | 
						|
//			sKeysTypes+=sep + FormatColumn("{ctype} {member}",field);
 | 
						|
//			sValues+= FormatColumn("\t\t\t\t{member}={@};\r\n",field);
 | 
						|
//			sep=", ";			
 | 
						|
//		}
 | 
						|
		ReadOnlyProperties(_workingTable.PrimaryKeys);
 | 
						|
%>
 | 
						|
			public PKCriteria(<%=sKeysTypes%>)
 | 
						|
			{
 | 
						|
<%=sValues%>
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
	}
 | 
						|
	private void vlnReadData(IColumns cols,bool bEditable)
 | 
						|
	{
 | 
						|
		IList cols2=cols;
 | 
						|
		if (!bEditable)cols2=NotTimestamp(cols);
 | 
						|
%>
 | 
						|
		private void ReadData(SafeDataReader dr)
 | 
						|
		{
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_className%>.ReadData", GetHashCode());
 | 
						|
			try
 | 
						|
			{
 | 
						|
<%=FormatColumns(dicRead,cols2,"\r\n","\t\t\t\t")%><%
 | 
						|
			//Hashtable dicAlias = new Hashtable();
 | 
						|
			foreach(IForeignKey FK in _workingTable.ForeignKeys)
 | 
						|
			{
 | 
						|
				//if (FK.PrimaryTable == _workingTable && !IsPrimaryKey(FK))
 | 
						|
				if (FK.PrimaryTable == _workingTable) // 20071023
 | 
						|
				{
 | 
						|
					string sAlias = GetAlias(FK);
 | 
						|
					string sClass = FKClassName(FK);
 | 
						|
					string sField = FKFieldName(FK);
 | 
						|
%>
 | 
						|
				<%=MemberName(sClass)+ sAlias%>Count = dr.GetInt32("<%=sField + sAlias%>Count");<%			
 | 
						|
				}
 | 
						|
			}
 | 
						|
			if (bEditable){
 | 
						|
%>
 | 
						|
				MarkOld();<%
 | 
						|
			}
 | 
						|
%>
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.ReadData", ex);
 | 
						|
				_ErrorMessage = ex.Message;
 | 
						|
				throw new DbCslaException("<%=_className%>.ReadData", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
	}
 | 
						|
	private void vlnDataAccessPortal(IColumns Columns )
 | 
						|
	{
 | 
						|
%>
 | 
						|
		#region Data Access Portal<%
 | 
						|
		vlnPKCriteria();
 | 
						|
// Parent Criteria 
 | 
						|
		IForeignKey fkParent = FKParentFK(_workingTable);
 | 
						|
		string sParent = ParentName(fkParent);
 | 
						|
		if (fkParent != null && _doOldParent)
 | 
						|
		{
 | 
						|
			string parKeys = FormatColumns("{member}",fkParent.ForeignColumns,", ");
 | 
						|
			string parValues=FormatColumns("\t\t\t\t{member} = {local};",fkParent.ForeignColumns,"\r\n");
 | 
						|
			string parKeysTypes=FormatColumns("{ctype} {local}",fkParent.ForeignColumns,", ");
 | 
						|
%>
 | 
						|
		[Serializable()]
 | 
						|
		private class <%=sParent%>Criteria
 | 
						|
		{
 | 
						|
<%ReadOnlyProperties(fkParent.ForeignColumns);%>
 | 
						|
			public <%=sParent%>Criteria(<%=parKeysTypes%>)
 | 
						|
			{
 | 
						|
<%=parValues%>
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
// Unique Criteria 
 | 
						|
		ArrayList uniqueIndexes=UniqueIndexes(_workingTable);
 | 
						|
		foreach(IIndex ind in uniqueIndexes)
 | 
						|
		{
 | 
						|
			string sBy = FormatColumns("{name}",ind.Columns,"_","");
 | 
						|
			string indKeyTypes = FormatColumns("{ctype} {local}",ind.Columns,", ","");
 | 
						|
			string indValues=FormatColumns("\t\t\t\t{member} = {local};",ind.Columns,"\r\n");
 | 
						|
%>
 | 
						|
		[Serializable()]
 | 
						|
		private class <%=sBy%>Criteria
 | 
						|
		{
 | 
						|
<%ReadOnlyProperties(ind.Columns);%>
 | 
						|
			public <%=sBy%>Criteria(<%=indKeyTypes%>)
 | 
						|
			{
 | 
						|
<%=indValues%>
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
// DataPortal_Create
 | 
						|
%>
 | 
						|
		// CSLATODO: If Create needs to access DB - It should not be marked RunLocal
 | 
						|
		[RunLocal()]
 | 
						|
		private new void DataPortal_Create()
 | 
						|
		{
 | 
						|
<%=FormatColumns("{member} = new Guid();",Guid(Columns),"\r\n","\t\t\t")%><%=FormatColumns("{member} = Next{prop};",AutoKey(Columns),"\r\n","\t\t\t")%>
 | 
						|
			// Database Defaults
 | 
						|
<%=FormatColumns("{member} = " + extMName + ".Default{prop};",HasDefaults(Columns),"\r\n","\t\t\t")%>
 | 
						|
			// CSLATODO: Add any defaults that are necessary
 | 
						|
			ValidationRules.CheckRules();
 | 
						|
		}<%
 | 
						|
		vlnReadData(Columns,true);
 | 
						|
		vlnDataPortalFetch("PK",_workingTable.PrimaryKeys,_className,true);
 | 
						|
//		IForeignKey fkParent = FKParentFK(_workingTable);
 | 
						|
		if (fkParent != null && _doOldParent)
 | 
						|
		{
 | 
						|
//		string sParent = ParentName(fkParent);
 | 
						|
			vlnDataPortalFetch(sParent,fkParent.ForeignColumns,sParent + _className,false);
 | 
						|
		}
 | 
						|
		foreach(IIndex ind in uniqueIndexes)
 | 
						|
		{
 | 
						|
			string sBy = FormatColumns("{name}",ind.Columns,"_","");
 | 
						|
			vlnDataPortalFetch(sBy,ind.Columns,_className + "By" + sBy,false);
 | 
						|
		}
 | 
						|
		string sUpdateMyList="";
 | 
						|
		foreach(IForeignKey fk in _workingTable.ForeignKeys) // 20070220
 | 
						|
		{
 | 
						|
			if (_workingTable != fk.PrimaryTable && IsPrimaryKey1(fk) && !IsPrimaryKey(fk))
 | 
						|
			{
 | 
						|
				sUpdateMyList += string.Format("\r\n\t\t\t\tif (_My{0} != null) _My{0}.Update();",ClassName(fk.PrimaryTable.Name) + GetNewAlias(fk,fk));
 | 
						|
			}
 | 
						|
		}
 | 
						|
// DataPortal_Insert
 | 
						|
%>
 | 
						|
		[Transactional(TransactionalTypes.TransactionScope)]
 | 
						|
		protected override void DataPortal_Insert()
 | 
						|
		{
 | 
						|
			try
 | 
						|
			{
 | 
						|
				using (SqlConnection cn = Database.<%=_dbConnection%>_SqlConnection)
 | 
						|
				{
 | 
						|
					ApplicationContext.LocalContext["cn"] = cn;
 | 
						|
					SQLInsert();
 | 
						|
					// removing of item only needed for local data portal
 | 
						|
					if (ApplicationContext.ExecutionLocation == ApplicationContext.ExecutionLocations.Client)
 | 
						|
						ApplicationContext.LocalContext.Remove("cn");
 | 
						|
				}
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.DataPortal_Insert", ex);
 | 
						|
				_ErrorMessage = ex.Message;
 | 
						|
				throw new DbCslaException("<%=_className%>.DataPortal_Insert", ex);
 | 
						|
			}
 | 
						|
			finally
 | 
						|
			{
 | 
						|
				<%=_databaseLogDebug%>("[{0}] <%=_className%>.DataPortal_Insert", GetHashCode());
 | 
						|
			}
 | 
						|
		}
 | 
						|
		[Transactional(TransactionalTypes.TransactionScope)]
 | 
						|
		internal void SQLInsert()
 | 
						|
		{
 | 
						|
			if (!this.IsDirty) return;
 | 
						|
			try
 | 
						|
			{<%=sUpdateMyList%>
 | 
						|
				SqlConnection cn = (SqlConnection)ApplicationContext.LocalContext["cn"];
 | 
						|
				using (SqlCommand cm = cn.CreateCommand())
 | 
						|
				{
 | 
						|
					cm.CommandType = CommandType.StoredProcedure;
 | 
						|
					cm.CommandText = "add<%=_className%>";
 | 
						|
					// Input All Fields - Except Calculated Columns<%
 | 
						|
		foreach(IColumn column in Columns)
 | 
						|
		{
 | 
						|
			if ((!column.IsAutoKey) && (!column.IsComputed))
 | 
						|
			{
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\t{ifLogicP}cm.Parameters.AddWithValue(\"{@}\", {?dbprefix}{Parent}{?dbsuffix});",column));// 20070316
 | 
						|
			}	
 | 
						|
		}
 | 
						|
%>
 | 
						|
					// Output Calculated Columns<%
 | 
						|
		foreach(IColumn column in Columns)
 | 
						|
		{
 | 
						|
			if ((column.IsAutoKey) || (column.IsComputed))
 | 
						|
			{
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\tSqlParameter param{member} = new SqlParameter(\"{@new}\", {sqltype});",column));
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\tparam{member}.Direction = ParameterDirection.Output;",column));
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\tcm.Parameters.Add(param{member});",column));
 | 
						|
			}	
 | 
						|
		}
 | 
						|
%>
 | 
						|
					// CSLATODO: Define any additional output parameters
 | 
						|
					cm.ExecuteNonQuery();
 | 
						|
					// Save all values being returned from the Procedure<%
 | 
						|
		foreach(IColumn column in Columns)
 | 
						|
		{
 | 
						|
			if ((column.IsAutoKey) || (column.IsComputed))
 | 
						|
			{
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\t{member} = ({ctype})cm.Parameters[\"{@new}\"].Value;",column));
 | 
						|
			}	
 | 
						|
		}
 | 
						|
%>
 | 
						|
				}
 | 
						|
				MarkOld();
 | 
						|
				// update child objects<%
 | 
						|
		foreach(IColumn field in Columns)
 | 
						|
		{
 | 
						|
			if (field.IsInForeignKey && field.IsInPrimaryKey)
 | 
						|
			{
 | 
						|
				//A column that's in a fk and in the pk represents a fk relationship
 | 
						|
				//from another table, a one-to-many relationship.  (This might be 
 | 
						|
				//a bad assumption for a table with a composite primary key.)
 | 
						|
				//... and then we have to add collections for the foreign tables.
 | 
						|
				foreach( IForeignKey fk in field.ForeignKeys )
 | 
						|
				{
 | 
						|
					if (fk.PrimaryTable == _workingTable){
 | 
						|
						string sObjName;
 | 
						|
						if (!IsPrimaryKey(fk)){
 | 
						|
							sObjName = FKClassesName( fk ) + GetAlias(fk);
 | 
						|
%>
 | 
						|
				if (<%=MemberName(sObjName)%> != null) <%=MemberName(sObjName)%>.Update(this);<%
 | 
						|
						} 
 | 
						|
						else 
 | 
						|
						{
 | 
						|
							sObjName = ClassName( fk.ForeignTable );
 | 
						|
%>
 | 
						|
				if (<%=MemberName("My" + sObjName)%> != null) <%=MemberName("My" + sObjName)%>.Update(this);<%
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
%>
 | 
						|
				<%=_databaseLogDebug%>("[{0}] <%=_className%>.SQLInsert", GetHashCode());
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.SQLInsert", ex);
 | 
						|
				_ErrorMessage = ex.Message;
 | 
						|
				throw new DbCslaException("<%=_className%>.SQLInsert", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
// Add
 | 
						|
		string sKeysTypesI="";
 | 
						|
		string sKeysI="";
 | 
						|
		string sValuesI="";
 | 
						|
		string sepi="";
 | 
						|
		foreach(IColumn column in Columns)
 | 
						|
		{
 | 
						|
			if ((!column.IsComputed))
 | 
						|
			{
 | 
						|
				if (!column.IsAutoKey){
 | 
						|
					sValuesI+=FormatColumn("\r\n\t\t\t\t\t{ifLogicL}cm.Parameters.AddWithValue(\"{@}\", {parent}{?dbtype});",column);
 | 
						|
				}
 | 
						|
				if (IsParentCol(column)){
 | 
						|
					sKeysTypesI+=sepi + _className + " my" + ParentName(column.ForeignKeys[0]);
 | 
						|
					sKeysI+=sepi + "my" + ParentName(column.ForeignKeys[0]);
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					sKeysTypesI+=sepi + FormatColumn("{?ref}{!type} {!local}",column);
 | 
						|
					sKeysI+=sepi + FormatColumn("{?ref}{member}",column);
 | 
						|
				}
 | 
						|
				sepi=", ";
 | 
						|
			}	
 | 
						|
		}
 | 
						|
		string sRetval = (IsTimestamp(Columns).Count > 0 ? "byte[]" : "void");
 | 
						|
%>
 | 
						|
		[Transactional(TransactionalTypes.TransactionScope)]
 | 
						|
		public static <%=sRetval%> Add(SqlConnection cn, <%=sKeysTypesI%>)
 | 
						|
		{
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_className%>.Add", 0);
 | 
						|
			try
 | 
						|
			{
 | 
						|
				using (SqlCommand cm = cn.CreateCommand())
 | 
						|
				{
 | 
						|
					cm.CommandType = CommandType.StoredProcedure;
 | 
						|
					cm.CommandText = "add<%=_className%>";
 | 
						|
					// Input All Fields - Except Calculated Columns<%=sValuesI%>
 | 
						|
					// Output Calculated Columns<%
 | 
						|
		foreach(IColumn column in Columns)
 | 
						|
		{
 | 
						|
			if ((column.IsAutoKey) || (column.IsComputed))
 | 
						|
			{
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\tSqlParameter param{member} = new SqlParameter(\"{@new}\", {sqltype});",column));
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\tparam{member}.Direction = ParameterDirection.Output;",column));
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\tcm.Parameters.Add(param{member});",column));
 | 
						|
			}
 | 
						|
		}
 | 
						|
%>
 | 
						|
					// CSLATODO: Define any additional output parameters
 | 
						|
					cm.ExecuteNonQuery();
 | 
						|
					// Save all values being returned from the Procedure<%
 | 
						|
		IColumn tsCol=null;
 | 
						|
		foreach(IColumn column in Columns)
 | 
						|
		{
 | 
						|
			if ((column.IsAutoKey) || (column.IsComputed))
 | 
						|
			{
 | 
						|
				if (column.DataTypeName=="timestamp")tsCol=column;
 | 
						|
				else output.write(FormatColumn("\r\n\t\t\t\t\t{local} = ({ctype})cm.Parameters[\"{@new}\"].Value;",column));
 | 
						|
			}	
 | 
						|
		}
 | 
						|
		if (tsCol != null)
 | 
						|
			output.write(FormatColumn("\r\n\t\t\t\t\treturn ({ctype})cm.Parameters[\"{@new}\"].Value;",tsCol));
 | 
						|
		else
 | 
						|
			output.write("\r\n\t\t\t// No Timestamp value to return");
 | 
						|
%>
 | 
						|
				}
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.Add", ex);
 | 
						|
				throw new DbCslaException("<%=_className%>.Add", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
// DataPortal_Update
 | 
						|
%>
 | 
						|
		[Transactional(TransactionalTypes.TransactionScope)]
 | 
						|
		protected override void DataPortal_Update()
 | 
						|
		{
 | 
						|
			if (!IsDirty) return;	// If not dirty - nothing to do
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_className%>.DataPortal_Update", GetHashCode());
 | 
						|
			try
 | 
						|
			{
 | 
						|
				using (SqlConnection cn = Database.<%=_dbConnection%>_SqlConnection)
 | 
						|
				{
 | 
						|
					ApplicationContext.LocalContext["cn"] = cn;
 | 
						|
					SQLUpdate();
 | 
						|
					// removing of item only needed for local data portal
 | 
						|
					if (ApplicationContext.ExecutionLocation == ApplicationContext.ExecutionLocations.Client)
 | 
						|
						ApplicationContext.LocalContext.Remove("cn");
 | 
						|
				}
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.DataPortal_Update", ex);
 | 
						|
				_ErrorMessage = ex.Message;
 | 
						|
				if (!ex.Message.EndsWith("has been edited by another user.")) throw ex;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		[Transactional(TransactionalTypes.TransactionScope)]
 | 
						|
		internal void SQLUpdate()
 | 
						|
		{
 | 
						|
			if (!IsDirty) return;	// If not dirty - nothing to do
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_className%>.SQLUpdate", GetHashCode());
 | 
						|
			try
 | 
						|
			{<%=sUpdateMyList%>
 | 
						|
				SqlConnection cn = (SqlConnection)ApplicationContext.LocalContext["cn"];
 | 
						|
				if (base.IsDirty)
 | 
						|
				{
 | 
						|
					using (SqlCommand cm = cn.CreateCommand())
 | 
						|
					{
 | 
						|
						cm.CommandType = CommandType.StoredProcedure;
 | 
						|
						cm.CommandText = "update<%=_className%>";
 | 
						|
						// All Fields including Calculated Fields<%
 | 
						|
		foreach(IColumn column in Columns)
 | 
						|
		{
 | 
						|
			output.write(FormatColumn("\r\n\t\t\t\t\t\t{ifLogicP}cm.Parameters.AddWithValue(\"{@}\", {?dbprefix}{Parent}{?dbsuffix});",column));
 | 
						|
		}
 | 
						|
%>
 | 
						|
						// Output Calculated Columns<%
 | 
						|
		foreach(IColumn column in Columns)
 | 
						|
		{
 | 
						|
			if (column.IsComputed)
 | 
						|
			{
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\t\tSqlParameter param{member} = new SqlParameter(\"{@new}\", {sqltype});",column));
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\t\tparam{member}.Direction = ParameterDirection.Output;",column));
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\t\tcm.Parameters.Add(param{member});",column));
 | 
						|
			}	
 | 
						|
		}
 | 
						|
%>
 | 
						|
						// CSLATODO: Define any additional output parameters
 | 
						|
						cm.ExecuteNonQuery();
 | 
						|
						// Save all values being returned from the Procedure<%
 | 
						|
		foreach(IColumn column in Columns)
 | 
						|
		{
 | 
						|
			if (column.IsComputed)
 | 
						|
			{
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\t\t{member} = ({ctype})cm.Parameters[\"{@new}\"].Value;",column));
 | 
						|
			}	
 | 
						|
		}
 | 
						|
%>
 | 
						|
					}
 | 
						|
				}
 | 
						|
				MarkOld();
 | 
						|
				// use the open connection to update child objects<%
 | 
						|
		foreach(IColumn field in Columns)
 | 
						|
		{
 | 
						|
			if (field.IsInForeignKey && field.IsInPrimaryKey)
 | 
						|
			{
 | 
						|
				//A column that's in a fk and in the pk represents a fk relationship
 | 
						|
				//from another table, a one-to-many relationship.  (This might be 
 | 
						|
				//a bad assumption for a table with a composite primary key.)
 | 
						|
				//... and then we have to add collections for the foreign tables.
 | 
						|
				foreach( IForeignKey fk in field.ForeignKeys )
 | 
						|
				{
 | 
						|
					if (fk.PrimaryTable == _workingTable){
 | 
						|
					string sObjName;
 | 
						|
						if (!IsPrimaryKey(fk)){
 | 
						|
							sObjName = FKClassesName( fk ) + GetAlias( fk );
 | 
						|
%>
 | 
						|
				if (<%=MemberName(sObjName)%> != null) <%=MemberName(sObjName)%>.Update(this);<%
 | 
						|
						 } 
 | 
						|
						else 
 | 
						|
						{
 | 
						|
							sObjName = ClassName( fk.ForeignTable );
 | 
						|
%>
 | 
						|
				if (<%=MemberName("My" + sObjName)%> != null) <%=MemberName("My" + sObjName)%>.Update(this);<%
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
%>
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.SQLUpdate", ex);
 | 
						|
				_ErrorMessage = ex.Message;
 | 
						|
				if (!ex.Message.EndsWith("has been edited by another user.")) throw ex;
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
// Update
 | 
						|
		string sKeysTypesU="";
 | 
						|
		string sKeysU="";
 | 
						|
		string sValuesU="";
 | 
						|
		string sepu="";
 | 
						|
		foreach(IColumn column in Columns)
 | 
						|
		{
 | 
						|
			//if ((!column.IsComputed))
 | 
						|
			//{
 | 
						|
			// Commentted out the following two lines for Permissions
 | 
						|
			//	if (!column.IsAutoKey)
 | 
						|
					//sValuesU+=FormatColumn("\r\n\t\t\t\t\t{ifLogicL}cm.Parameters.AddWithValue(\"{@}\", {parent}{?dbtype});",column);
 | 
						|
					sValuesU+=FormatColumn("\r\n\t\t\t\t\t{ifLogicl}cm.Parameters.AddWithValue(\"{@}\", {local});",column);
 | 
						|
				//if (IsParentCol(column)){
 | 
						|
				//	sKeysTypesU+= sepi + "/*1*/ " +  _className + " my" + sParent;
 | 
						|
				//	sKeysU+=sepi + "my" + sParent;
 | 
						|
				//}
 | 
						|
				//else
 | 
						|
				//{
 | 
						|
					sKeysTypesU+=sepu + FormatColumn("{?ref}{ctype} {local}",column);
 | 
						|
					sKeysU+=sepu + FormatColumn("{?ref}{member}",column); 
 | 
						|
				//}
 | 
						|
				sepu=", ";
 | 
						|
			//}	
 | 
						|
		}
 | 
						|
		if (OneToOne(_workingTable)) // 20070314
 | 
						|
		{
 | 
						|
			IForeignKey fk = _workingTable.PrimaryKeys[0].ForeignKeys[0];
 | 
						|
			string sPrimaryTable = ClassName(fk.PrimaryTable);
 | 
						|
			string sPrimaryLocal = LocalName(sPrimaryTable);
 | 
						|
			string sInsert="";
 | 
						|
			string sUpdate="";
 | 
						|
	//		string sDelete="";
 | 
						|
			string sTimestamp="";
 | 
						|
			sepu="";
 | 
						|
			sepi="";
 | 
						|
			foreach(IColumn column in fk.ForeignTable.Columns)
 | 
						|
			{
 | 
						|
				if (column.DataTypeName=="timestamp")
 | 
						|
					sTimestamp=FormatColumn("{member} = ",column);
 | 
						|
				if (!IsIn(column,fk.ForeignColumns))
 | 
						|
				{				
 | 
						|
					string sRefI = ParentRef(column);
 | 
						|
					string sRefU = ParentRefU(column);
 | 
						|
					if (sRefI==null)
 | 
						|
					{
 | 
						|
						sRefI = FormatColumn("{?ref}{?dbprefix}{!propmember}{?dbsuff}",column);
 | 
						|
						sRefU = FormatColumn("{?ref}{?dbprefix}{member}{?dbsuff}",column);
 | 
						|
					}
 | 
						|
						sUpdate+=sepu + sRefU;
 | 
						|
						sepu=", ";
 | 
						|
						if (!column.IsComputed)// && !column.IsAutoKey
 | 
						|
						{
 | 
						|
							sInsert+=sepi+sRefI;
 | 
						|
							sepi=", ";
 | 
						|
						}
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						//string sRef = FormatColumn("{?dbprefix}{rmember}{?dbsuff}",RelatedColumn(column,fk));
 | 
						|
						string sRef = sPrimaryLocal;
 | 
						|
						sInsert+=sepi + sPrimaryLocal;
 | 
						|
						sUpdate+=sepu + sPrimaryLocal + "." + FormatColumn("{?ref}{?dbprefix}{prop}{?dbsuff}",column);
 | 
						|
						sepi=", ";
 | 
						|
						sepu=", ";
 | 
						|
						//sepd=", ";
 | 
						|
					}
 | 
						|
				}
 | 
						|
%>
 | 
						|
		internal void Update(<%=sPrimaryTable%> <%=sPrimaryLocal%>)<%=Debug("// 20071023.2a Update")%>
 | 
						|
		{
 | 
						|
			if (!this.IsDirty) return;
 | 
						|
			if (base.IsDirty)
 | 
						|
			{
 | 
						|
				SqlConnection cn = (SqlConnection)ApplicationContext.LocalContext["cn"];
 | 
						|
				if (IsNew)
 | 
						|
					<%=sTimestamp%><%=_className%>.Add(cn, <%=sInsert%>);
 | 
						|
				else
 | 
						|
					<%=sTimestamp%><%=_className%>.Update(cn, <%=sUpdate%>);
 | 
						|
				MarkOld();
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
		else // 20070314
 | 
						|
		{
 | 
						|
//			IForeignKey fk = _workingTable.PrimaryKeys[0].ForeignKeys[0];
 | 
						|
//			string sPrimaryTable = ClassName(fk.PrimaryTable);
 | 
						|
//			string sPrimaryLocal = LocalName(sPrimaryTable);
 | 
						|
			string sInsert="";
 | 
						|
			string sUpdate="";
 | 
						|
			string sTimestamp="";
 | 
						|
			sepu="";
 | 
						|
			sepi="";
 | 
						|
			foreach(IColumn column in Columns)
 | 
						|
			{
 | 
						|
				if (column.DataTypeName=="timestamp")
 | 
						|
					sTimestamp=FormatColumn("{member} = ",column);
 | 
						|
				//string sRef = FormatColumn("{?ref}{?dbprefix}{!member}{?dbsuff}",column);
 | 
						|
				string sRefI = FormatColumn("{?ref}{?dbprefix}{!member}{?dbsuff}",column);
 | 
						|
				string sRefU = FormatColumn("{?ref}{?dbprefix}{member}{?dbsuff}",column);
 | 
						|
				if (!column.IsComputed)// && !column.IsAutoKey
 | 
						|
				{
 | 
						|
					sInsert+=sepi+sRefI;
 | 
						|
					sepi=", ";
 | 
						|
				}
 | 
						|
				sUpdate+=sepu + sRefU;
 | 
						|
				sepi=", ";
 | 
						|
				sepu=", ";
 | 
						|
			}
 | 
						|
			string sDelete ="";
 | 
						|
			string sepdd = "";
 | 
						|
			foreach(IColumn column in _workingTable.PrimaryKeys)
 | 
						|
			{
 | 
						|
				//if (IsIn(column,fk.ForeignColumns))
 | 
						|
					//sDelete+=sepdd+FormatColumn("{!localcolumn}",column);
 | 
						|
					//sDelete+=sepdd+FormatColumn("{rmember}",RelatedColumn(column,fk));
 | 
						|
				//else
 | 
						|
					sDelete+=sepdd+FormatColumn("{member}",column);
 | 
						|
				sepdd=", ";
 | 
						|
			}
 | 
						|
%>
 | 
						|
		internal void Update()<%=Debug("// 20071023.2b Update")%>
 | 
						|
		{
 | 
						|
			if (!this.IsDirty) return;
 | 
						|
			if (base.IsDirty)
 | 
						|
			{
 | 
						|
				SqlConnection cn = (SqlConnection)ApplicationContext.LocalContext["cn"];
 | 
						|
				if (IsNew)
 | 
						|
					<%=sTimestamp%><%=_className%>.Add(cn, <%=sInsert%>);
 | 
						|
				else
 | 
						|
					<%=sTimestamp%><%=_className%>.Update(cn, <%=sUpdate%>);
 | 
						|
				MarkOld();
 | 
						|
			}<%
 | 
						|
			if (vlnChildObjects(Columns))
 | 
						|
			{
 | 
						|
%>
 | 
						|
		}
 | 
						|
		internal void DeleteSelf(<%=_className%> <%=_className.ToLower()%>)
 | 
						|
		{
 | 
						|
			// if we're not dirty then don't update the database
 | 
						|
			if (!this.IsDirty) return;
 | 
						|
			// if we're new then don't update the database
 | 
						|
			if (this.IsNew) return;
 | 
						|
			SqlConnection cn = (SqlConnection)ApplicationContext.LocalContext["cn"];
 | 
						|
			<%=_className%>.Remove(cn, <%=sDelete%>);
 | 
						|
			MarkNew();<%
 | 
						|
			}
 | 
						|
%>
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		[Transactional(TransactionalTypes.TransactionScope)]
 | 
						|
		public static <%=sRetval%> Update(SqlConnection cn, <%=sKeysTypesU%>)
 | 
						|
		{
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_className%>.Update", 0);
 | 
						|
			try
 | 
						|
			{
 | 
						|
				using (SqlCommand cm = cn.CreateCommand())
 | 
						|
				{
 | 
						|
					cm.CommandType = CommandType.StoredProcedure;
 | 
						|
					cm.CommandText = "update<%=_className%>";
 | 
						|
					// Input All Fields - Except Calculated Columns<%=sValuesU%>
 | 
						|
					// Output Calculated Columns<%
 | 
						|
		foreach(IColumn column in Columns)
 | 
						|
		{
 | 
						|
			if (column.IsComputed)
 | 
						|
			{
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\tSqlParameter param{member} = new SqlParameter(\"{@new}\", {sqltype});",column));
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\tparam{member}.Direction = ParameterDirection.Output;",column));
 | 
						|
				output.write(FormatColumn("\r\n\t\t\t\t\tcm.Parameters.Add(param{member});",column));
 | 
						|
			}	
 | 
						|
		}
 | 
						|
%>
 | 
						|
					// CSLATODO: Define any additional output parameters
 | 
						|
					cm.ExecuteNonQuery();
 | 
						|
					// Save all values being returned from the Procedure<%
 | 
						|
		tsCol=null;
 | 
						|
		foreach(IColumn column in Columns)
 | 
						|
		{
 | 
						|
			if (column.IsComputed)
 | 
						|
			{
 | 
						|
				if (column.DataTypeName=="timestamp")tsCol=column;
 | 
						|
				else output.write(FormatColumn("\r\n\t\t\t\t\t{local} = ({ctype})cm.Parameters[\"{@new}\"].Value;",column));
 | 
						|
			}	
 | 
						|
		}
 | 
						|
		if (tsCol != null)
 | 
						|
			output.write(FormatColumn("\r\n\t\t\t\t\treturn ({ctype})cm.Parameters[\"{@new}\"].Value;",tsCol));
 | 
						|
		else
 | 
						|
			output.write("\r\n\t\t\t\t// No Timestamp value to return");
 | 
						|
%>
 | 
						|
				}
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.Update", ex);
 | 
						|
				throw new DbCslaException("<%=_className%>.Update", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
// DataPortal_DeleteSelf
 | 
						|
%>
 | 
						|
		[Transactional(TransactionalTypes.TransactionScope)]
 | 
						|
		protected override void DataPortal_DeleteSelf()
 | 
						|
		{
 | 
						|
			DataPortal_Delete(new PKCriteria(<%=FormatColumns("{member}",_workingTable.PrimaryKeys,", ")%>));
 | 
						|
		}<%
 | 
						|
// DataPortal_Delete
 | 
						|
%>
 | 
						|
		[Transactional(TransactionalTypes.TransactionScope)]
 | 
						|
		private void DataPortal_Delete(PKCriteria criteria)
 | 
						|
		{
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_className%>.DataPortal_Delete", GetHashCode());
 | 
						|
			try
 | 
						|
			{
 | 
						|
				using (SqlConnection cn = Database.<%=_dbConnection%>_SqlConnection)
 | 
						|
				{
 | 
						|
					using (SqlCommand cm = cn.CreateCommand())
 | 
						|
					{
 | 
						|
						cm.CommandType = CommandType.StoredProcedure;
 | 
						|
						cm.CommandText = "delete<%=_className%>";<%
 | 
						|
			output.write(FormatColumns("\r\n\t\t\t\t\t\t{ifLogic@}cm.Parameters.AddWithValue(\"{@}\", criteria.{prop}{?dbtype});"
 | 
						|
			,_workingTable.PrimaryKeys,""));
 | 
						|
%>
 | 
						|
						cm.ExecuteNonQuery();
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.DataPortal_Delete", ex);
 | 
						|
				_ErrorMessage = ex.Message;
 | 
						|
				throw new DbCslaException("<%=_className%>.DataPortal_Delete", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
// Delete
 | 
						|
		string sKeysTypesD="";
 | 
						|
		string sValuesD="";
 | 
						|
		string sepd="";
 | 
						|
		foreach(IColumn column in _workingTable.PrimaryKeys)
 | 
						|
		{
 | 
						|
			sValuesD+=FormatColumn("\r\n\t\t\t\t\t{ifLogicL}cm.Parameters.AddWithValue(\"{@}\", {local}{?dbtype});",column);
 | 
						|
			sKeysTypesD+=sepd + FormatColumn("{ctype} {local}",column);
 | 
						|
			sepd=", ";
 | 
						|
		}
 | 
						|
%>
 | 
						|
		[Transactional(TransactionalTypes.TransactionScope)]
 | 
						|
		public static void Remove(SqlConnection cn, <%=sKeysTypesD%>)
 | 
						|
		{
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_className%>.Remove", 0);
 | 
						|
			try
 | 
						|
			{
 | 
						|
				using (SqlCommand cm = cn.CreateCommand())
 | 
						|
				{
 | 
						|
					cm.CommandType = CommandType.StoredProcedure;
 | 
						|
					cm.CommandText = "delete<%=_className%>";
 | 
						|
					// Input PK Fields<%=sValuesD%>
 | 
						|
					// CSLATODO: Define any additional output parameters
 | 
						|
					cm.ExecuteNonQuery();
 | 
						|
				}
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.Remove", ex);
 | 
						|
				throw new DbCslaException("<%=_className%>.Remove", ex);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
private bool vlnChildObjects(IColumns Columns)
 | 
						|
{
 | 
						|
	bool retval = false;
 | 
						|
	foreach(IColumn field in Columns)
 | 
						|
	{
 | 
						|
		if (field.IsInForeignKey && field.IsInPrimaryKey)
 | 
						|
		{
 | 
						|
			//A column that's in a fk and in the pk represents a fk relationship
 | 
						|
			//from another table, a one-to-many relationship.  (This might be 
 | 
						|
			//a bad assumption for a table with a composite primary key.)
 | 
						|
			//... and then we have to add collections for the foreign tables.
 | 
						|
			foreach( IForeignKey fk in field.ForeignKeys )
 | 
						|
			{
 | 
						|
				if (fk.PrimaryTable == _workingTable)
 | 
						|
				{
 | 
						|
					string sObjName;
 | 
						|
					if (!IsPrimaryKey(fk)){ // Items that use this table's Primary Key
 | 
						|
						sObjName = FKClassesName( fk ) + GetAlias( fk );
 | 
						|
						if (fk.PrimaryTable == fk.ForeignTable)retval = true;
 | 
						|
%>
 | 
						|
			if (<%=MemberName(sObjName)%> != null) <%=MemberName(sObjName)%>.Update(this);<%
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						sObjName = ClassName( fk.ForeignTable );
 | 
						|
%>
 | 
						|
			if (<%=MemberName("My" + sObjName)%> != null) <%=MemberName("My" + sObjName)%>.Update(this);<%
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return retval;
 | 
						|
}
 | 
						|
private void vlnBrokenRuleObjects(IColumns Columns)
 | 
						|
{
 | 
						|
	foreach(IColumn field in Columns)
 | 
						|
	{
 | 
						|
		if (field.IsInForeignKey && field.IsInPrimaryKey)
 | 
						|
		{
 | 
						|
			//A column that's in a fk and in the pk represents a fk relationship
 | 
						|
			//from another table, a one-to-many relationship.  (This might be 
 | 
						|
			//a bad assumption for a table with a composite primary key.)
 | 
						|
			//... and then we have to add collections for the foreign tables.
 | 
						|
			foreach( IForeignKey fk in field.ForeignKeys )
 | 
						|
			{
 | 
						|
				if (fk.PrimaryTable == _workingTable)
 | 
						|
				{
 | 
						|
					string sObjName;
 | 
						|
					if (!IsPrimaryKey(fk))
 | 
						|
					{ // Items that use this table's Primary Key
 | 
						|
						sObjName = FKClassesName( fk ) + GetAlias(fk);
 | 
						|
%>
 | 
						|
					if (<%=MemberName(sObjName)%> != null && (hasBrokenRules = <%=MemberName(sObjName)%>.HasBrokenRules) != null) return hasBrokenRules;<%
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						string sMemberName = MemberName("My" + ClassName( fk.ForeignTable )+ GetNewAlias(fk,fk));
 | 
						|
%>
 | 
						|
					if (<%=sMemberName%> != null && (hasBrokenRules = <%=sMemberName%>.HasBrokenRules) != null) return hasBrokenRules;<%
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
			foreach( IForeignKey fk in field.ForeignKeys )
 | 
						|
			{
 | 
						|
				if (fk.PrimaryTable != _workingTable && IsPrimaryKey1(fk) && !IsPrimaryKey(fk))
 | 
						|
				{
 | 
						|
					string sMemberName  = MemberName("My" + ClassName(fk.PrimaryTable.Name) + GetNewAlias(fk,fk));
 | 
						|
%>
 | 
						|
					if (<%=sMemberName%> != null && (hasBrokenRules = <%=sMemberName%>.HasBrokenRules) != null) return hasBrokenRules;<%
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
private void vlnBrokenRuleObjects(IForeignKey myFk)
 | 
						|
{
 | 
						|
	IColumns Columns=myFk.ForeignTable.Columns;
 | 
						|
	// Exclude one to one & ForeignKey Relationship
 | 
						|
	foreach(IColumn field in Columns)
 | 
						|
	{
 | 
						|
		if (!field.IsInForeignKey || !field.IsInPrimaryKey)
 | 
						|
		{
 | 
						|
			foreach( IForeignKey fk in field.ForeignKeys )
 | 
						|
			{
 | 
						|
				if (fk.PrimaryTable != _workingTable && IsPrimaryKey1(fk) && !IsPrimaryKey(fk))
 | 
						|
				{
 | 
						|
					string sMemberName  = MemberName("My" + ClassName(fk.PrimaryTable.Name) + GetNewAlias(fk,fk));
 | 
						|
%>
 | 
						|
					if (<%=sMemberName%> != null && (hasBrokenRules = <%=sMemberName%>.HasBrokenRules) != null) return hasBrokenRules;<%
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
private void vlnTest(IForeignKey myFk) // 20070517
 | 
						|
{
 | 
						|
	IColumns Columns=myFk.ForeignTable.Columns;
 | 
						|
	// Exclude one to one & ForeignKey Relationship
 | 
						|
	foreach(IColumn field in Columns)
 | 
						|
	{
 | 
						|
		if (!field.IsInForeignKey || !field.IsInPrimaryKey)
 | 
						|
		{
 | 
						|
			foreach( IForeignKey fk in field.ForeignKeys )
 | 
						|
			{
 | 
						|
				if (fk.PrimaryTable != _workingTable && IsPrimaryKey1(fk) && !IsPrimaryKey(fk))
 | 
						|
				{
 | 
						|
					string sMemberName  = MemberName("My" + ClassName(fk.PrimaryTable.Name) + GetNewAlias(fk,fk));
 | 
						|
%>
 | 
						|
					if (<%=sMemberName%> != null && (hasBrokenRules = <%=sMemberName%>.HasBrokenRules) != null) return hasBrokenRules;<%
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
private string RequiredRelatedColumn(IColumn field)
 | 
						|
{
 | 
						|
	if (!field.IsInPrimaryKey && !field.IsNullable)
 | 
						|
	{
 | 
						|
		foreach( IForeignKey fk in field.ForeignKeys )
 | 
						|
		{
 | 
						|
			if (fk.PrimaryTable != _workingTable && IsPrimaryKey1(fk) && !IsPrimaryKey(fk))
 | 
						|
			{
 | 
						|
				return  "My" + ClassName(fk.PrimaryTable.Name) + GetNewAlias(fk,fk);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return null;
 | 
						|
}
 | 
						|
private void vlnDataPortalFetch(string sPrefix,IColumns cols,string sql,bool getChildren)
 | 
						|
	{
 | 
						|
// DataPortal_Fetch
 | 
						|
%>
 | 
						|
		private void DataPortal_Fetch(<%=sPrefix%>Criteria criteria)
 | 
						|
		{
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_className%>.DataPortal_Fetch", GetHashCode());
 | 
						|
			try
 | 
						|
			{
 | 
						|
				using (SqlConnection cn = Database.<%=_dbConnection%>_SqlConnection)
 | 
						|
				{
 | 
						|
					ApplicationContext.LocalContext["cn"] = cn;
 | 
						|
					using (SqlCommand cm = cn.CreateCommand())
 | 
						|
					{
 | 
						|
						cm.CommandType = CommandType.StoredProcedure;
 | 
						|
						cm.CommandText = "get<%=sql%>";<%
 | 
						|
		output.write(FormatColumns("\r\n\t\t\t\t\t\t{ifLogic@}cm.Parameters.AddWithValue(\"{@}\", criteria.{prop}{?dbtype});"
 | 
						|
			,cols,""));
 | 
						|
%>
 | 
						|
						using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
 | 
						|
						{
 | 
						|
							if (!dr.Read())
 | 
						|
							{
 | 
						|
								_ErrorMessage = "No Record Found";
 | 
						|
								return;
 | 
						|
							}
 | 
						|
							ReadData(dr);<%
 | 
						|
		// Read members 
 | 
						|
		//output.write(FormatColumns(dicRead,Columns,"","\r\n\t\t\t\t\t\t\t"));
 | 
						|
		//dicRead1 = new Hashtable();
 | 
						|
		//dicRead1["timestamp"]="\r\n\t\t\t\t\t\tdr.GetBytes(\"{name}\", 0, {member}, 0, 8);";// CSLATODO: Need to handle TimeStamp
 | 
						|
		//output.write(FormatColumns(dicRead1,Columns,""));
 | 
						|
//			if (_workingTable != fk.ForeignTable)
 | 
						|
//				FKSelect(fk,tbl);
 | 
						|
		// CSLATODO: Fix This  See Below
 | 
						|
//		foreach(IColumn field in Columns)
 | 
						|
//		{
 | 
						|
//			if (field.IsInForeignKey && field.IsInPrimaryKey)
 | 
						|
//			{
 | 
						|
				//A column that's in a fk and in the pk represents a fk relationship
 | 
						|
				//from another table, a one-to-many relationship.  (This might be 
 | 
						|
				//a bad assumption for a table with a composite primary key.)
 | 
						|
				//... and then we have to add collections for the foreign tables.
 | 
						|
//				foreach( IForeignKey fk in field.ForeignKeys )
 | 
						|
		if (getChildren)
 | 
						|
		{
 | 
						|
			Hashtable dicAlias = new Hashtable();
 | 
						|
			foreach(IForeignKey fk in _workingTable.ForeignKeys)
 | 
						|
					{
 | 
						|
						if (fk.PrimaryTable == _workingTable){
 | 
						|
							//string sAlias = GetAlias(dicAlias,fk.ForeignTable);
 | 
						|
							string sAlias = GetAlias(fk);
 | 
						|
							string sObjName="";
 | 
						|
							if (!IsPrimaryKey(fk)){
 | 
						|
								sObjName = FKClassesName( fk ) + GetAlias(fk);
 | 
						|
								string sExtra = FKAndString(_className, fk, ", this" );
 | 
						|
//							else
 | 
						|
//								sObjName = ClassName( fk.ForeignTable );
 | 
						|
							if (fk.PrimaryTable != fk.ForeignTable){
 | 
						|
%>
 | 
						|
							// load child objects
 | 
						|
							dr.NextResult();
 | 
						|
							<%=MemberName(sObjName)%> = <%=sObjName%>.Get(dr<%=sExtra%>);<%
 | 
						|
								}
 | 
						|
							}
 | 
						|
							else
 | 
						|
							{
 | 
						|
								sObjName = ClassName( fk.ForeignTable );
 | 
						|
%>
 | 
						|
							// load child objects
 | 
						|
							dr.NextResult();
 | 
						|
							<%=MemberName("My" + sObjName)%> = <%=sObjName%>.Get(dr);<%
 | 
						|
//							if (<%=MemberName("My" + sObjName) + sAlias == null)
 | 
						|
//								=MemberName("My" + sObjName) + sAlias = <%=sObjName.New(=FormatColumns("criteria.{prop}",fk.ForeignTable.PrimaryKeys,", ","")
 | 
						|
							}
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
//			}
 | 
						|
//		}
 | 
						|
%>
 | 
						|
						}
 | 
						|
					}
 | 
						|
					// removing of item only needed for local data portal
 | 
						|
					if (ApplicationContext.ExecutionLocation == ApplicationContext.ExecutionLocations.Client)
 | 
						|
						ApplicationContext.LocalContext.Remove("cn");
 | 
						|
				}
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.DataPortal_Fetch", ex);
 | 
						|
				_ErrorMessage = ex.Message;
 | 
						|
				throw new DbCslaException("<%=_className%>.DataPortal_Fetch", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
	}
 | 
						|
	private void vlnExists(IColumns Columns )
 | 
						|
	{
 | 
						|
		string sValues=FormatColumns("\t\t\t\t{member} = {local};",_workingTable.PrimaryKeys,"\r\n");
 | 
						|
		string sKeysTypes=FormatColumns("{ctype} {local}",_workingTable.PrimaryKeys,", ");
 | 
						|
		string sKeys=FormatColumns("{local}",_workingTable.PrimaryKeys,", ");
 | 
						|
		string sDeclare=FormatColumns("\r\n\t\t\tprivate {ctype} {member};",_workingTable.PrimaryKeys,"");
 | 
						|
		string sParams=FormatColumns("\r\n\t\t\t\t\t\t\t{ifLogicP}cm.Parameters.AddWithValue(\"{@}\", {?dbprefix}{member}{?dbsuffix});",_workingTable.PrimaryKeys,"");;
 | 
						|
%>
 | 
						|
		#region Exists
 | 
						|
		public static bool Exists(<%=sKeysTypes%>)
 | 
						|
		{
 | 
						|
			ExistsCommand result;
 | 
						|
			try
 | 
						|
			{
 | 
						|
				result = DataPortal.Execute<ExistsCommand>(new ExistsCommand(<%=sKeys%>));
 | 
						|
				return result.Exists;
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				throw new DbCslaException("Error on <%=_className%>.Exists", ex);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		[Serializable()]
 | 
						|
		private class ExistsCommand : CommandBase
 | 
						|
		{<%=sDeclare%>
 | 
						|
			private bool _exists;
 | 
						|
			public bool Exists
 | 
						|
			{
 | 
						|
				get { return _exists; }
 | 
						|
			}
 | 
						|
			public ExistsCommand(<%=sKeysTypes%>)
 | 
						|
			{
 | 
						|
<%=sValues%>
 | 
						|
			}
 | 
						|
			protected override void DataPortal_Execute()
 | 
						|
			{
 | 
						|
				<%=_databaseLogDebug%>("[{0}] <%=_className%>.DataPortal_Execute", GetHashCode());
 | 
						|
				try
 | 
						|
				{
 | 
						|
					using (SqlConnection cn = Database.<%=_dbConnection%>_SqlConnection)
 | 
						|
					{
 | 
						|
						cn.Open();
 | 
						|
						using (SqlCommand cm = cn.CreateCommand())
 | 
						|
						{
 | 
						|
							cm.CommandType = CommandType.StoredProcedure;
 | 
						|
							cm.CommandText = "exists<%=_className%>";<%=sParams%>
 | 
						|
							int count = (int)cm.ExecuteScalar();
 | 
						|
							_exists = (count > 0);
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
				catch (Exception ex)
 | 
						|
				{
 | 
						|
					<%=_databaseLogError%>("<%=_className%>.DataPortal_Execute", ex);
 | 
						|
					throw new DbCslaException("<%=_className%>.DataPortal_Execute", ex);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnInfoExtension(IColumns columns)
 | 
						|
	{
 | 
						|
%>
 | 
						|
		// Standard Refresh
 | 
						|
		#region extension
 | 
						|
		<%=_className%>Extension <%=MemberName(_className)%>Extension = new <%=_className%>Extension();
 | 
						|
		[Serializable()]
 | 
						|
		partial class <%=_className%>Extension : extensionBase { }
 | 
						|
		[Serializable()]
 | 
						|
		class extensionBase
 | 
						|
		{
 | 
						|
			// Default Refresh
 | 
						|
			public virtual void Refresh(<%=_className%> tmp) { }
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnDefaults(IColumns columns)
 | 
						|
	{
 | 
						|
%>
 | 
						|
		// Standard Default Code
 | 
						|
		#region extension
 | 
						|
		<%=extName%> <%=extMName%> = new <%=extName%>();
 | 
						|
		[Serializable()]
 | 
						|
		partial class <%=extName%> : extensionBase
 | 
						|
		{
 | 
						|
		}
 | 
						|
		[Serializable()]
 | 
						|
		class extensionBase
 | 
						|
		{
 | 
						|
			// Default Values<%
 | 
						|
		foreach(IColumn column in HasDefaults(columns))
 | 
						|
		{
 | 
						|
			string sConvert ="{default}";
 | 
						|
			if (FormatColumn("{rtype}",column).StartsWith("bool"))sConvert="Convert.ToBoolean({default})";
 | 
						|
%>
 | 
						|
			public virtual <%=FormatColumn("{rtype} Default{prop}",column)%>
 | 
						|
			{
 | 
						|
				get { return <%=FormatColumn(sConvert,column)%>; }
 | 
						|
			}<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
			// Authorization Rules
 | 
						|
			public virtual void AddAuthorizationRules(Csla.Security.AuthorizationRules rules)
 | 
						|
			{
 | 
						|
				// Needs to be overriden to add new authorization rules
 | 
						|
			}
 | 
						|
			// Instance Authorization Rules
 | 
						|
			public virtual void AddInstanceAuthorizationRules(Csla.Security.AuthorizationRules rules)
 | 
						|
			{
 | 
						|
				// Needs to be overriden to add new authorization rules
 | 
						|
			}
 | 
						|
			// Validation Rules
 | 
						|
			public virtual void AddValidationRules(Csla.Validation.ValidationRules rules)
 | 
						|
			{
 | 
						|
				// Needs to be overriden to add new validation rules
 | 
						|
			}
 | 
						|
			// InstanceValidation Rules
 | 
						|
			public virtual void AddInstanceValidationRules(Csla.Validation.ValidationRules rules)
 | 
						|
			{
 | 
						|
				// Needs to be overriden to add new validation rules
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
		}
 | 
						|
		private void vlnExtension(IColumns columns)
 | 
						|
		{
 | 
						|
%>
 | 
						|
 | 
						|
//// The following is a sample Extension File.  You can use it to create <%=_className%>Ext.cs
 | 
						|
//using System;
 | 
						|
//using System.Collections.Generic;
 | 
						|
//using System.Text;
 | 
						|
//using Csla;
 | 
						|
 | 
						|
//namespace <%=_nameSpace%>
 | 
						|
//{
 | 
						|
//  public partial class <%=_className%>
 | 
						|
//  {
 | 
						|
//    partial class <%=_className%>Extension : extensionBase
 | 
						|
//    {
 | 
						|
//      // CSLATODO: Override automatic defaults<%
 | 
						|
			foreach(IColumn column in HasDefaults(columns))
 | 
						|
			{
 | 
						|
%>
 | 
						|
//      public virtual <%=FormatColumn("{ctype} Default{prop}",column)%>
 | 
						|
//      {
 | 
						|
//        get { return <%=FormatColumn("{default}",column)%>; }
 | 
						|
//      }<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
//      public new void AddAuthorizationRules(Csla.Security.AuthorizationRules rules)
 | 
						|
//      {
 | 
						|
//        //rules.AllowRead(Dbid, "<Role(s)>");
 | 
						|
//      }
 | 
						|
//      public new void AddInstanceAuthorizationRules(Csla.Security.AuthorizationRules rules)
 | 
						|
//      {
 | 
						|
//        //rules.AllowInstanceRead(Dbid, "<Role(s)>");
 | 
						|
//      }
 | 
						|
//      public new void AddValidationRules(Csla.Validation.ValidationRules rules)
 | 
						|
//      {
 | 
						|
//        rules.AddRule(
 | 
						|
//          Csla.Validation.CommonRules.StringMaxLength,
 | 
						|
//          new Csla.Validation.CommonRules.MaxLengthRuleArgs("Name", 100));
 | 
						|
//      }
 | 
						|
//      public new void AddInstanceValidationRules(Csla.Validation.ValidationRules rules)
 | 
						|
//      {
 | 
						|
//        rules.AddInstanceRule(/* Instance Validation Rule */);
 | 
						|
//      }
 | 
						|
//    }
 | 
						|
//  }
 | 
						|
//}
 | 
						|
<%
 | 
						|
	}
 | 
						|
	//private bool IsValueType( string type )
 | 
						|
	//{
 | 
						|
	//	switch( type )
 | 
						|
	//	{
 | 
						|
	//		case "sbyte":
 | 
						|
	//		case "byte":
 | 
						|
	//		case "short":
 | 
						|
	//		case "ushort":
 | 
						|
	//		case "int":
 | 
						|
	//		case "uint":
 | 
						|
	//		case "long":
 | 
						|
	//		case "ulong":
 | 
						|
	//		case "char":
 | 
						|
	//		case "float":
 | 
						|
	//		case "double":
 | 
						|
	//		case "bool":
 | 
						|
	//		case "decimal":
 | 
						|
	//		case "DateTime":
 | 
						|
	//			return true;
 | 
						|
	//			break;
 | 
						|
	//			
 | 
						|
	//		default:
 | 
						|
	//			return false;
 | 
						|
	//			break;
 | 
						|
	//	}
 | 
						|
	//}
 | 
						|
	
 | 
						|
	
 | 
						|
	private void vlnBusinessMethodsFKList(IForeignKey fk,string sAlias)
 | 
						|
	{
 | 
						|
%>
 | 
						|
		#region Business Methods
 | 
						|
		private string _ErrorMessage = string.Empty;
 | 
						|
		public string ErrorMessage
 | 
						|
		{
 | 
						|
			get { return _ErrorMessage; }
 | 
						|
		}<%
 | 
						|
		//string sFkClassListName =  ClassName( fk.PrimaryTable ) + ClassesName( fk.ForeignTable ) + sAlias;
 | 
						|
		//string sFkClassName =  ClassName( fk.PrimaryTable ) + ClassName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sFkClassListName =  _className;
 | 
						|
		string sFkClassName =  _subclassName;
 | 
						|
		string slName=LocalName(ClassName(fk.ForeignTable));
 | 
						|
		ArrayList fkCols = new ArrayList();
 | 
						|
		//output.write("\r\n// FK.P " + fk.PrimaryTable.Name + " FK.F " +fk.ForeignTable.Name); 
 | 
						|
		bool bManyToMany = false;
 | 
						|
//		if (fk.ForeignTable != fk.PrimaryTable)
 | 
						|
//		{
 | 
						|
//			foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys)
 | 
						|
//			{
 | 
						|
//				//output.write("\r\n// PK.P " + pk.PrimaryTable.Name + " PK.F " +pk.ForeignTable.Name);
 | 
						|
//				if (pk.ForeignTable == fk.ForeignTable && pk.PrimaryTable != fk.PrimaryTable && pk.PrimaryTable != pk.ForeignTable && ForeignRequired(pk))
 | 
						|
//				{
 | 
						|
//					foreach(IColumn col in pk.ForeignColumns){
 | 
						|
//						//output.write("\r\n// col " + col.Name + " IsInPrimaryKey " + col.IsInPrimaryKey.ToString()); 
 | 
						|
//						//if (col.IsInPrimaryKey)
 | 
						|
//						if (!col.IsNullable){
 | 
						|
//							fkCols.Add(col);
 | 
						|
//						}
 | 
						|
//					}
 | 
						|
//				}
 | 
						|
//			}
 | 
						|
//		}
 | 
						|
		foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys)
 | 
						|
		{
 | 
						|
			if (!bManyToMany && ManyToMany(_workingTable,fk,pk))
 | 
						|
			{
 | 
						|
				bManyToMany = true;
 | 
						|
				foreach(IColumn col in pk.ForeignColumns)
 | 
						|
					if (!col.IsNullable) fkCols.Add(col);
 | 
						|
			}
 | 
						|
		}
 | 
						|
//		fkCols = new ArrayList();
 | 
						|
		if (fkCols.Count == 0){
 | 
						|
//			bManyToMany = false;
 | 
						|
%>
 | 
						|
		// One To Many<%
 | 
						|
			foreach(IColumn col in fk.ForeignTable.PrimaryKeys)
 | 
						|
			{
 | 
						|
				if (!IsIn(col,fk.ForeignColumns))
 | 
						|
					fkCols.Add(col);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else
 | 
						|
		{
 | 
						|
%>
 | 
						|
		// Many To Many<%
 | 
						|
		}
 | 
						|
			string sTestTypes = FormatColumns("{!type}",fkCols,", ");
 | 
						|
			string sFkKeysTypes = FormatColumns("{!type} {!local}",fkCols,", ");
 | 
						|
			string sFkKeys = FormatColumns("{!local}",fkCols,", ");
 | 
						|
			string sFkCheck = FormatColumns(slName +".{prop} == {!localcolumn}",fkCols," && ");
 | 
						|
			string sReqKeysCheck= "";
 | 
						|
			string sKeysTypes="";
 | 
						|
			string sKeys="";
 | 
						|
			//string sValues="";
 | 
						|
			//string sValues2="";
 | 
						|
			//string sep="";
 | 
						|
			string sep2="";
 | 
						|
			string sep3="";
 | 
						|
			string reqKeys="";
 | 
						|
			string reqKeysTypes="";
 | 
						|
			ArrayList reqCols = new ArrayList();
 | 
						|
			ArrayList uniqueChildren = FindUniqueChildren(fk);
 | 
						|
			bool bParentRef=false;
 | 
						|
			foreach(IColumn column in fk.ForeignTable.Columns)
 | 
						|
			{
 | 
						|
				if (IsRequired(column) && !column.IsComputed && !column.IsAutoKey)
 | 
						|
				{
 | 
						|
					// 20070220
 | 
						|
					// sKeysTypes+=sep+FormatColumn("{ctype} {local}",column);
 | 
						|
					// sKeys+=sep+FormatColumn("{local}",column);
 | 
						|
					if (!IsIn(column,fk.ForeignColumns))
 | 
						|
					{
 | 
						|
						sKeysTypes+=sep2+FormatColumn("{!type} {!local}",column);
 | 
						|
						sKeys+=sep2+FormatColumn("{!local}",column);
 | 
						|
						sReqKeysCheck+=sep3+FormatColumn(slName +".{prop} == {local}",column);
 | 
						|
						reqKeys+=sep2+FormatColumn("{!local}",column);
 | 
						|
						reqKeysTypes+=sep2+FormatColumn("{!type} {!local}",column);
 | 
						|
						reqCols.Add(column);
 | 
						|
						sep2=", ";
 | 
						|
						sep3=" && ";
 | 
						|
					} else {
 | 
						|
						if (!bParentRef && FKParentFK(_workingTable) == fk){
 | 
						|
//							WriteLine("\r\n\r\n// 20070305 Column {0}\r\n",column.Name);
 | 
						|
							reqKeys="my"+ParentName(fk)+sep2+reqKeys;
 | 
						|
							reqKeysTypes=FormatColumn("{ParentType}",column)+sep2+reqKeysTypes;
 | 
						|
							sep2=", ";
 | 
						|
							bParentRef=true;
 | 
						|
						}
 | 
						|
					}
 | 
						|
					//sValues+=sep+RelatedObject(column);
 | 
						|
					//sValues2+=sep+RelatedObjectType(column);
 | 
						|
					//sep=", ";
 | 
						|
				}
 | 
						|
			}
 | 
						|
			string reqKeysContain = (SameList(reqCols,fkCols)?sFkKeys:reqKeys);
 | 
						|
			IList uniqueMatch = FindUnique(uniqueChildren,reqCols);
 | 
						|
			//if (uniqueMatch != null)WriteLine("\r\n//20090108 - \r\n\tuniqueMatch {0}\r\n\treqCols {1}", ColumnListToString(uniqueMatch),ColumnListToString(reqCols) );
 | 
						|
			string newString = (fkCols.Count==1 && sTestTypes == "int" ? "new " : "");
 | 
						|
%>
 | 
						|
		public <%=newString%><%=sFkClassName%> this[<%=sFkKeysTypes%>]
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				foreach (<%=sFkClassName%> <%=slName%> in this)
 | 
						|
					if (<%=sFkCheck%>)
 | 
						|
						return <%=slName%>;
 | 
						|
				return null;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		public new System.Collections.Generic.IList<<%=sFkClassName%>> Items
 | 
						|
		{
 | 
						|
			get { return base.Items; }
 | 
						|
		}
 | 
						|
		public <%=sFkClassName%> GetItem(<%=sFkKeysTypes%>)
 | 
						|
		{
 | 
						|
			foreach (<%=sFkClassName%> <%=slName%> in this)
 | 
						|
				if (<%=sFkCheck%>)
 | 
						|
					return <%=slName%>;
 | 
						|
			return null;
 | 
						|
		}<%
 | 
						|
		if (bManyToMany)
 | 
						|
		{
 | 
						|
			if (reqKeys!=""){ // Has Required Fields
 | 
						|
%>
 | 
						|
		public <%=sFkClassName%> Add(<%=reqKeysTypes%>)// Many to Many with required fields
 | 
						|
		{
 | 
						|
			if (!Contains(<%=sFkKeys%>))
 | 
						|
			{
 | 
						|
				<%=sFkClassName%> <%=slName%> =	<%=sFkClassName%>.New(<%=reqKeys%>);
 | 
						|
				this.Add(<%=slName%>);
 | 
						|
				return <%=slName%>;
 | 
						|
			}
 | 
						|
			else
 | 
						|
				throw new InvalidOperationException("<%=slName%> already exists");
 | 
						|
		}<%
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				if (uniqueMatch != null && uniqueMatch.Count > 1)
 | 
						|
				{
 | 
						|
%>
 | 
						|
		public <%=sFkClassName%> Add(<%=reqKeysTypes%>)// Many to Many with unique fields
 | 
						|
		{
 | 
						|
			if (!Contains(<%=FormatColumns("{local}",uniqueMatch,", ","")%>))
 | 
						|
			{
 | 
						|
				<%=sFkClassName%> <%=slName%> = <%=sFkClassName%>.New(<%=reqKeys%>);
 | 
						|
				this.Add(<%=slName%>);
 | 
						|
				return <%=slName%>;
 | 
						|
			}
 | 
						|
			else
 | 
						|
				throw new InvalidOperationException("<%=slName%> already exists");
 | 
						|
		}<%
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
%>
 | 
						|
		public <%=sFkClassName%> Add(<%=reqKeysTypes%>)// Many to Many with no required fields
 | 
						|
		{
 | 
						|
			<%=sFkClassName%> <%=slName%> =	<%=sFkClassName%>.New(<%=reqKeys%>);
 | 
						|
			this.Add(<%=slName%>);
 | 
						|
			return <%=slName%>;
 | 
						|
		}<%
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		else // One to Many
 | 
						|
		{
 | 
						|
			// If Child add parent 20070221
 | 
						|
			
 | 
						|
			string sParent = "";
 | 
						|
			string sParentUse = "";
 | 
						|
			//if ("Child" + ClassesName(sFkClassName) == _className)
 | 
						|
			//{
 | 
						|
			//	sParent = sFkClassName + " parent, ";
 | 
						|
			//	sParentUse = "parent, ";
 | 
						|
			//}
 | 
						|
				if (uniqueMatch != null)
 | 
						|
				{
 | 
						|
%>
 | 
						|
		public <%=sFkClassName%> Add(<%=reqKeysTypes%>) // One to Many with unique fields
 | 
						|
		{
 | 
						|
			if (!Contains(<%=FormatColumns("{!local}",uniqueMatch,", ","")%>))
 | 
						|
			{
 | 
						|
				<%=sFkClassName%> <%=slName%> = <%=sFkClassName%>.New(<%=reqKeys%>);
 | 
						|
				this.Add(<%=slName%>);
 | 
						|
				return <%=slName%>;
 | 
						|
			}
 | 
						|
			else
 | 
						|
				throw new InvalidOperationException("<%=slName%> already exists");
 | 
						|
		}<%
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
%>
 | 
						|
		public <%=sFkClassName%> Add(<%=sParent%><%=sKeysTypes%>) // One to Many 
 | 
						|
		{
 | 
						|
			<%=sFkClassName%> <%=slName%> = <%=sFkClassName%>.New(<%=sParentUse%><%=sKeys%>);
 | 
						|
			this.Add(<%=slName%>);
 | 
						|
			return <%=slName%>;
 | 
						|
		}<%
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if(fkCols.Count == 1 && uniqueMatch != null && uniqueMatch.Count == 1 && fkCols[0]==uniqueMatch[0])
 | 
						|
					uniqueMatch=null;
 | 
						|
%>
 | 
						|
		public void Remove(<%=sFkKeysTypes%>)
 | 
						|
		{
 | 
						|
			foreach (<%=sFkClassName%> <%=slName%> in this)
 | 
						|
			{
 | 
						|
				if (<%=sFkCheck%>)
 | 
						|
				{
 | 
						|
					Remove(<%=slName%>);
 | 
						|
					break;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		public bool Contains(<%=sFkKeysTypes%>)
 | 
						|
		{
 | 
						|
			foreach (<%=sFkClassName%> <%=slName%> in this)
 | 
						|
				if (<%=sFkCheck%>)
 | 
						|
					return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
		public bool ContainsDeleted(<%=sFkKeysTypes%>)
 | 
						|
		{
 | 
						|
			foreach (<%=sFkClassName%> <%=slName%> in DeletedList)
 | 
						|
				if (<%=sFkCheck%>)
 | 
						|
					return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
		public bool IsDirtyList(List<object> list)
 | 
						|
		{
 | 
						|
			// any non-new deletions make us dirty
 | 
						|
			foreach (<%=sFkClassName%> item in DeletedList)
 | 
						|
				if (!item.IsNew)
 | 
						|
					return true;
 | 
						|
			// run through all the child objects
 | 
						|
			// and if any are dirty then then
 | 
						|
			// collection is dirty
 | 
						|
			foreach (<%=sFkClassName%> child in this)
 | 
						|
				if (child.IsDirtyList(list))
 | 
						|
					return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
		public override bool IsValid
 | 
						|
		{
 | 
						|
			get { return IsValidList(new List<object>()); }
 | 
						|
		}
 | 
						|
		public bool IsValidList(List<object> list)
 | 
						|
    {
 | 
						|
      // run through all the child objects
 | 
						|
      // and if any are invalid then the
 | 
						|
      // collection is invalid
 | 
						|
      foreach (<%=sFkClassName%> child in this)
 | 
						|
				if (!child.IsValidList(list))
 | 
						|
				{
 | 
						|
					//Console.WriteLine("Valid {0} Child {1} - {2}", child.IsValid, child.GetType().Name,child.ToString());
 | 
						|
					return false;
 | 
						|
				}
 | 
						|
       return true;
 | 
						|
     }<%
 | 
						|
		foreach(IList lst in uniqueChildren){
 | 
						|
			if (!SameTypes(lst,fkCols)){ // Has Required Fields 20070302
 | 
						|
				if(lst.Count == 1 && uniqueMatch != null && uniqueMatch.Count == 1 && lst[0]==uniqueMatch[0])
 | 
						|
					uniqueMatch=null;
 | 
						|
				string sLstKeysTypes = FormatColumns("{ctype} {local}",lst,", ");
 | 
						|
//				string sKeys = FormatColumns("{local}",lst,", ");
 | 
						|
				string sLstCheck = FormatColumns(slName +".{prop} == {local}",lst," && ");
 | 
						|
%>
 | 
						|
		public bool Contains(<%=sLstKeysTypes%>)
 | 
						|
		{
 | 
						|
			foreach (<%=sFkClassName%> <%=slName%> in this)
 | 
						|
				if (<%=sLstCheck%>)
 | 
						|
					return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
		public bool ContainsDeleted(<%=sLstKeysTypes%>)
 | 
						|
		{
 | 
						|
			foreach (<%=sFkClassName%> <%=slName%> in DeletedList)
 | 
						|
				if (<%=sLstCheck%>)
 | 
						|
					return true;
 | 
						|
			return false;
 | 
						|
		}<%
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if(uniqueMatch != null && uniqueMatch.Count == 1)
 | 
						|
		{
 | 
						|
			IColumn col =(IColumn)uniqueMatch[0];
 | 
						|
				string sLstKeysTypes = FormatColumn("{!type} {!local}",col);
 | 
						|
				string sLstCheck = FormatColumn(slName +".{prop} == {!local}.{!column}",col);
 | 
						|
%>
 | 
						|
		public bool Contains(<%=sLstKeysTypes%>)
 | 
						|
		{
 | 
						|
			foreach (<%=sFkClassName%> <%=slName%> in this)
 | 
						|
				if (<%=sLstCheck%>)
 | 
						|
					return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
		public bool ContainsDeleted(<%=sLstKeysTypes%>)
 | 
						|
		{
 | 
						|
			foreach (<%=sFkClassName%> <%=slName%> in DeletedList)
 | 
						|
				if (<%=sLstCheck%>)
 | 
						|
					return true;
 | 
						|
			return false;
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnFactoryMethodsFKList(IForeignKey fk,string sAlias)
 | 
						|
	{
 | 
						|
		//string sFkClassListName =  ClassName( fk.PrimaryTable ) + ClassesName( fk.ForeignTable ) + sAlias;
 | 
						|
		//string sFkClassName =  ClassName( fk.PrimaryTable ) + ClassName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sFkClassListName =  _className;
 | 
						|
		string sFkClassName =  _subclassName;
 | 
						|
		string sExtra1="";
 | 
						|
		string sExtra2="";
 | 
						|
		if (fk.PrimaryTable == fk.ForeignTable){
 | 
						|
			sExtra1=", " + _subclassName + " parent";
 | 
						|
			sExtra2=", parent";
 | 
						|
		}
 | 
						|
 | 
						|
%>
 | 
						|
		#region Factory Methods
 | 
						|
		internal static <%=sFkClassListName%> New()
 | 
						|
		{
 | 
						|
			return new <%=sFkClassListName%>();
 | 
						|
		}
 | 
						|
		internal static <%=sFkClassListName%> Get(SafeDataReader dr<%=sExtra1%>)
 | 
						|
		{
 | 
						|
			return new <%=sFkClassListName%>(dr<%=sExtra2%>);
 | 
						|
		}<%
 | 
						|
//		if (fk.PrimaryTable==fk.ForeignTable)
 | 
						|
//		{
 | 
						|
			// Get Children 20070205
 | 
						|
			string sBy = FormatColumns("{name}",fk.ForeignColumns,"_","");
 | 
						|
			string sKeyTypes = FormatColumns("{ctype1} {local}",fk.ForeignColumns,",","");
 | 
						|
			string sKeys = FormatColumns("{local}",fk.ForeignColumns,",","");
 | 
						|
%>
 | 
						|
		public static <%=sFkClassListName%> GetBy<%=sBy%>(<%=sKeyTypes%>)
 | 
						|
		{
 | 
						|
			try
 | 
						|
			{
 | 
						|
				return DataPortal.Fetch<<%=sFkClassListName%>>(new <%=sBy%>Criteria(<%=sKeys%>));
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				throw new DbCslaException("Error on <%=sFkClassListName%>.GetBy<%=sBy%>", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
//		}
 | 
						|
%>
 | 
						|
		private <%=sFkClassListName%>()
 | 
						|
		{
 | 
						|
			MarkAsChild();
 | 
						|
		}
 | 
						|
		internal <%=sFkClassListName%>(SafeDataReader dr<%=sExtra1%>)
 | 
						|
		{
 | 
						|
			MarkAsChild();
 | 
						|
			Fetch(dr<%=sExtra2%>);
 | 
						|
		}
 | 
						|
		private bool _Disposed = false;
 | 
						|
		private static int _CountCreated = 0;
 | 
						|
		private static int _CountDisposed = 0;
 | 
						|
		private static int _CountFinalized = 0;
 | 
						|
		private static int IncrementCountCreated
 | 
						|
		{ get { return ++_CountCreated; } }
 | 
						|
		private int _CountWhenCreated = IncrementCountCreated;
 | 
						|
		public static int CountCreated
 | 
						|
		{ get { return _CountCreated; } }
 | 
						|
		public static int CountNotDisposed
 | 
						|
		{ get { return _CountCreated - _CountDisposed; } }
 | 
						|
		public static int CountNotFinalized
 | 
						|
		{ get { return _CountCreated - _CountFinalized; } }
 | 
						|
		~<%=sFkClassListName%>()
 | 
						|
		{
 | 
						|
			_CountFinalized++;
 | 
						|
		}
 | 
						|
		public void Dispose()
 | 
						|
		{
 | 
						|
			if (_Disposed) return;
 | 
						|
			_CountDisposed++;
 | 
						|
			_Disposed = true;
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnDataAccessPortalFKList(IForeignKey fk,string sAlias)
 | 
						|
	{
 | 
						|
		//string sFkClassListName =  ClassName( fk.PrimaryTable ) + ClassesName( fk.ForeignTable ) + sAlias;
 | 
						|
		//string sFkClassName =  ClassName( fk.PrimaryTable ) + ClassName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sFkClassListName =  _className;
 | 
						|
		string sFkClassName =  _subclassName;
 | 
						|
		string sPrimaryTable = ClassName( fk.PrimaryTable );
 | 
						|
		string sPrimaryLocal = LocalName(sPrimaryTable);
 | 
						|
		string sExtra1="";
 | 
						|
		string sExtra2="";
 | 
						|
		if (fk.PrimaryTable == fk.ForeignTable){
 | 
						|
			sExtra1=", " + _subclassName + " parent";
 | 
						|
			sExtra2=", parent";
 | 
						|
		}
 | 
						|
%>
 | 
						|
		#region Data Access Portal
 | 
						|
		// called to load data from the database
 | 
						|
		private void Fetch(SafeDataReader dr<%=sExtra1%>)
 | 
						|
		{
 | 
						|
			this.RaiseListChangedEvents = false;
 | 
						|
			while (dr.Read())
 | 
						|
				this.Add(<%=sFkClassName%>.Get(dr<%=sExtra2%>));
 | 
						|
			this.RaiseListChangedEvents = true;
 | 
						|
		}<%
 | 
						|
		string sClassF = ClassName(fk.ForeignTable);
 | 
						|
		string sClassP = FormatColumns("{name}",fk.ForeignColumns,"_","");
 | 
						|
		string sBy = ClassesName(fk.ForeignTable) + "By" + FormatColumns("{name}",fk.ForeignColumns,"_","");
 | 
						|
		string sSelfParam = "";
 | 
						|
		if (fk.ForeignTable == fk.PrimaryTable)
 | 
						|
		{
 | 
						|
			sBy = ChildName(fk) + ClassesName(_workingTable);
 | 
						|
			sSelfParam = ", " + FormatColumns("criteria.{prop}",fk.ForeignColumns,"","");
 | 
						|
		}
 | 
						|
		string sKeyTypes = FormatColumns("{ctype1} {local}",fk.ForeignColumns,",","");
 | 
						|
%>
 | 
						|
		[Serializable()]
 | 
						|
		private class <%=sClassP%>Criteria
 | 
						|
		{
 | 
						|
			public <%=sClassP%>Criteria(<%=sKeyTypes%>)
 | 
						|
			{
 | 
						|
<%=FormatColumns("{member} = {local};",fk.ForeignColumns,"\r\n","\t\t\t\t")%>
 | 
						|
			}<%
 | 
						|
		foreach(IColumn c in fk.ForeignColumns)
 | 
						|
		{
 | 
						|
			string sMember=FormatColumn("{member}",c);
 | 
						|
			string sProp=FormatColumn("{prop}",c);
 | 
						|
			string sType=FormatColumn("{ctype1}",c);
 | 
						|
%>
 | 
						|
			private <%=sType%> <%=sMember%>;
 | 
						|
			public <%=sType%> <%=sProp%>
 | 
						|
			{
 | 
						|
				get { return <%=sMember%>; }
 | 
						|
				set { <%=sMember%> = value; }
 | 
						|
			}<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		}
 | 
						|
		private void DataPortal_Fetch(<%=sClassP%>Criteria criteria)
 | 
						|
		{
 | 
						|
			this.RaiseListChangedEvents = false;
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_className%>.DataPortal_Fetch<%=sClassP%>", GetHashCode());
 | 
						|
			try
 | 
						|
			{
 | 
						|
				using (SqlConnection cn = Database.<%=_dbConnection%>_SqlConnection)
 | 
						|
				{
 | 
						|
					using (SqlCommand cm = cn.CreateCommand())
 | 
						|
					{
 | 
						|
						cm.CommandType = CommandType.StoredProcedure;
 | 
						|
						cm.CommandText = "get<%=sBy%>";
 | 
						|
						<%=FormatColumns("{ifLogic@}cm.Parameters.AddWithValue(\"{@}\", " + "criteria.{prop});",fk.ForeignColumns,"\r\n\t\t\t","")%>
 | 
						|
						using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
 | 
						|
						{
 | 
						|
							while (dr.Read()) this.Add(new <%=_subclassName%>(dr<%=sSelfParam%>));
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.DataPortal_Fetch<%=sClassP%>", ex);
 | 
						|
				throw new DbCslaException("<%=_className%>.DataPortal_Fetch", ex);
 | 
						|
			}
 | 
						|
			this.RaiseListChangedEvents = true;
 | 
						|
		}<%
 | 
						|
		
 | 
						|
		// Insert 20070205a
 | 
						|
%>
 | 
						|
		internal void Update(<%=sPrimaryTable%> <%=sPrimaryLocal%>)<%=Debug("// 20071023.3 Update")%>
 | 
						|
		{
 | 
						|
			this.RaiseListChangedEvents = false;
 | 
						|
			try
 | 
						|
			{
 | 
						|
				// update (thus deleting) any deleted child objects
 | 
						|
				foreach (<%=sFkClassName%> obj in DeletedList)
 | 
						|
					obj.DeleteSelf(<%=sPrimaryLocal%>);// Deletes related record
 | 
						|
				// now that they are deleted, remove them from memory too
 | 
						|
				DeletedList.Clear();
 | 
						|
				// add/update any current child objects
 | 
						|
				foreach (<%=sFkClassName%> obj in this)
 | 
						|
				{<%
 | 
						|
// Logic changes for children
 | 
						|
		if (fk.PrimaryTable == fk.ForeignTable)
 | 
						|
		{
 | 
						|
%>
 | 
						|
					if (obj.IsNew)
 | 
						|
						obj.SQLInsert();
 | 
						|
					else
 | 
						|
						obj.SQLUpdate();<%
 | 
						|
		} else {
 | 
						|
%>
 | 
						|
					if (obj.IsNew)
 | 
						|
						obj.Insert(<%=sPrimaryLocal%>);
 | 
						|
					else
 | 
						|
						obj.Update(<%=sPrimaryLocal%>);<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
				}
 | 
						|
			}
 | 
						|
			finally
 | 
						|
			{
 | 
						|
				this.RaiseListChangedEvents = true;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnComponentModelFKList()
 | 
						|
	{
 | 
						|
%>
 | 
						|
		#region ICustomTypeDescriptor impl
 | 
						|
		public String GetClassName()
 | 
						|
		{ return TypeDescriptor.GetClassName(this, true); }
 | 
						|
		public AttributeCollection GetAttributes()
 | 
						|
		{ return TypeDescriptor.GetAttributes(this, true); }
 | 
						|
		public String GetComponentName()
 | 
						|
		{ return TypeDescriptor.GetComponentName(this, true); }
 | 
						|
		public TypeConverter GetConverter()
 | 
						|
		{ return TypeDescriptor.GetConverter(this, true); }
 | 
						|
		public EventDescriptor GetDefaultEvent()
 | 
						|
		{ return TypeDescriptor.GetDefaultEvent(this, true); }
 | 
						|
		public PropertyDescriptor GetDefaultProperty()
 | 
						|
		{ return TypeDescriptor.GetDefaultProperty(this, true); }
 | 
						|
		public object GetEditor(Type editorBaseType)
 | 
						|
		{ return TypeDescriptor.GetEditor(this, editorBaseType, true); }
 | 
						|
		public EventDescriptorCollection GetEvents(Attribute[] attributes)
 | 
						|
		{ return TypeDescriptor.GetEvents(this, attributes, true); }
 | 
						|
		public EventDescriptorCollection GetEvents()
 | 
						|
		{ return TypeDescriptor.GetEvents(this, true); }
 | 
						|
		public object GetPropertyOwner(PropertyDescriptor pd)
 | 
						|
		{ return this; }
 | 
						|
		/// <summary>
 | 
						|
		/// Called to get the properties of this type. Returns properties with certain
 | 
						|
		/// attributes. this restriction is not implemented here.
 | 
						|
		/// </summary>
 | 
						|
		/// <param name="attributes"></param>
 | 
						|
		/// <returns></returns>
 | 
						|
		public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
 | 
						|
		{ return GetProperties(); }
 | 
						|
		/// <summary>
 | 
						|
		/// Called to get the properties of this type.
 | 
						|
		/// </summary>
 | 
						|
		/// <returns></returns>
 | 
						|
		public PropertyDescriptorCollection GetProperties()
 | 
						|
		{
 | 
						|
			// Create a collection object to hold property descriptors
 | 
						|
			PropertyDescriptorCollection pds = new PropertyDescriptorCollection(null);
 | 
						|
			// Iterate the list 
 | 
						|
			for (int i = 0; i < this.Items.Count; i++)
 | 
						|
			{
 | 
						|
				// Create a property descriptor for the item and add to the property descriptor collection
 | 
						|
				<%=_className%>PropertyDescriptor pd = new <%=_className%>PropertyDescriptor(this, i);
 | 
						|
				pds.Add(pd);
 | 
						|
			}
 | 
						|
			// return the property descriptor collection
 | 
						|
			return pds;
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnPropertyDescriptorFKList1()
 | 
						|
	{
 | 
						|
%>
 | 
						|
	#region Property Descriptor
 | 
						|
	/// <summary>
 | 
						|
	/// Summary description for CollectionPropertyDescriptor.
 | 
						|
	/// </summary>
 | 
						|
	public partial class <%=_className%>PropertyDescriptor : PropertyDescriptor
 | 
						|
	{
 | 
						|
		private <%=_subclassName%> _Item = null;
 | 
						|
		public <%=_className%>PropertyDescriptor(<%=_className%> collection, int index):base("#" + index.ToString(), null)
 | 
						|
		{
 | 
						|
			_Item = collection.Items[index];
 | 
						|
		}
 | 
						|
		public override bool CanResetValue(object component)
 | 
						|
		{ return true; }
 | 
						|
		public override Type ComponentType
 | 
						|
		{
 | 
						|
			get { return _Item.GetType(); }
 | 
						|
		}
 | 
						|
		public override object GetValue(object component)
 | 
						|
		{ return _Item; }
 | 
						|
		public override bool IsReadOnly
 | 
						|
		{
 | 
						|
			get { return false; }
 | 
						|
		}
 | 
						|
		public override Type PropertyType
 | 
						|
		{
 | 
						|
			get { return _Item.GetType(); }
 | 
						|
		}
 | 
						|
		public override void ResetValue(object component)
 | 
						|
		{ ;}
 | 
						|
		public override bool ShouldSerializeValue(object component)
 | 
						|
		{ return true; }
 | 
						|
		public override void SetValue(object component, object value)
 | 
						|
		{ /*_Item = value*/;}
 | 
						|
 | 
						|
		//public override AttributeCollection Attributes
 | 
						|
		//{
 | 
						|
		//  get
 | 
						|
		//  {
 | 
						|
		//    return new AttributeCollection(null);
 | 
						|
		//  }
 | 
						|
		//}
 | 
						|
		//public override string DisplayName
 | 
						|
		//{
 | 
						|
		//  get { return this.collection.Items[index].ToString(); }
 | 
						|
		//}
 | 
						|
		//public override string Description
 | 
						|
		//{
 | 
						|
		//  get
 | 
						|
		//  { return this.collection.Items[index].ToString(); }
 | 
						|
		//}
 | 
						|
		//public override string Name
 | 
						|
		//{
 | 
						|
		//  get { return "#" + index.ToString(); }
 | 
						|
		//}
 | 
						|
	}
 | 
						|
	#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnPropertyDescriptorFKList()
 | 
						|
	{
 | 
						|
%>
 | 
						|
	#region Property Descriptor
 | 
						|
	/// <summary>
 | 
						|
	/// Summary description for CollectionPropertyDescriptor.
 | 
						|
	/// </summary>
 | 
						|
	public partial class <%=_className%>PropertyDescriptor : vlnListPropertyDescriptor
 | 
						|
	{
 | 
						|
		private <%=_subclassName%> Item { get { return (<%=_subclassName%>)_Item; } }
 | 
						|
		public <%=_className%>PropertyDescriptor(<%=_className%> collection, int index) : base(collection, index) { ;}
 | 
						|
	}
 | 
						|
	#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnListPropertyDescriptor()
 | 
						|
	{
 | 
						|
	%>
 | 
						|
	public partial class vlnListPropertyDescriptor : PropertyDescriptor
 | 
						|
	{
 | 
						|
		protected object _Item = null;
 | 
						|
		public vlnListPropertyDescriptor(System.Collections.IList collection, int index)
 | 
						|
			: base("#" + index.ToString(), null)
 | 
						|
		{ _Item = collection[index]; }
 | 
						|
		public override bool CanResetValue(object component)
 | 
						|
		{ return true; }
 | 
						|
		public override Type ComponentType
 | 
						|
		{ get { return _Item.GetType(); } }
 | 
						|
		public override object GetValue(object component)
 | 
						|
		{ return _Item; }
 | 
						|
		public override bool IsReadOnly
 | 
						|
		{ get { return false; } }
 | 
						|
		public override Type PropertyType
 | 
						|
		{ get { return _Item.GetType(); } }
 | 
						|
		public override void ResetValue(object component)
 | 
						|
		{ ;}
 | 
						|
		public override bool ShouldSerializeValue(object component)
 | 
						|
		{ return true; }
 | 
						|
		public override void SetValue(object component, object value)
 | 
						|
		{ /*_Item = value*/;}
 | 
						|
		//public override AttributeCollection Attributes
 | 
						|
		//{ get { return new AttributeCollection(null); } }
 | 
						|
		public override string DisplayName
 | 
						|
		{ get { return _Item.ToString(); } }
 | 
						|
		public override string Description
 | 
						|
		{ get { return _Item.ToString(); } }
 | 
						|
		public override string Name
 | 
						|
		{ get { return _Item.ToString(); } }
 | 
						|
	} // Class<%
 | 
						|
	}
 | 
						|
	private void vlnConvertorFKList(string sDisplayName)
 | 
						|
	{
 | 
						|
%>
 | 
						|
	#region Converter
 | 
						|
	internal class <%=_className%>Converter : ExpandableObjectConverter
 | 
						|
	{
 | 
						|
		public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destType)
 | 
						|
		{
 | 
						|
			if (destType == typeof(string) && value is <%=_className%>)
 | 
						|
			{
 | 
						|
				// Return department and department role separated by comma.
 | 
						|
				return ((<%=_className%>)value).Items.Count.ToString() + " <%=sDisplayName%>";
 | 
						|
			}
 | 
						|
			return base.ConvertTo(context, culture, value, destType);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnBusinessMethodsFKItem(IForeignKey fk,string sAlias)
 | 
						|
	{
 | 
						|
		string sFkClassListName =  ClassName( fk.PrimaryTable ) + ClassesName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sFkClassName =  ClassName( fk.PrimaryTable ) + ClassName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sPrimaryTable = ClassName( fk.PrimaryTable );
 | 
						|
		string sPrimaryLocal = LocalName(sPrimaryTable);
 | 
						|
%>
 | 
						|
		#region Business Methods
 | 
						|
		private string _ErrorMessage = string.Empty;
 | 
						|
		public string ErrorMessage
 | 
						|
		{
 | 
						|
			get { return _ErrorMessage; }
 | 
						|
		}<%
 | 
						|
	// Foreign Key Table Fields
 | 
						|
	string sKey="";
 | 
						|
	string sep="";
 | 
						|
	foreach(IColumn column in fk.ForeignTable.Columns)
 | 
						|
	{
 | 
						|
		if (!IsIn(column,fk.ForeignColumns))
 | 
						|
		{				
 | 
						|
			bool bReadOnly = column.IsInPrimaryKey || column.IsAutoKey || column.IsComputed;
 | 
						|
			string sCheck=(IsRelObj(column)?FormatColumn("\r\n\t\t\t\tif ({!member} != null) {member} = {!member}.{!column};",column):null);
 | 
						|
			vlnProperty(CSLAType( column ),MemberName(column)
 | 
						|
				,PropertyName(column),InitializeValue( column ),GetDescription(column),bReadOnly || IsRelObj(column),column.IsInPrimaryKey,false,null,sCheck,null,null);
 | 
						|
			vlnRelObjProperty(column,bReadOnly,false);
 | 
						|
			if (column.IsInPrimaryKey){
 | 
						|
				sKey+=sep+MemberName(column);
 | 
						|
				sep=".ToString() + ";
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if ((sep != "") && (sKey.IndexOf(sep) > 0))
 | 
						|
			sKey="(" + sKey + ".ToString()).GetHashCode()";
 | 
						|
	}
 | 
						|
	// Foreign Key Related Table Fields  // 20070220
 | 
						|
	Hashtable dicAlias = new Hashtable();
 | 
						|
	foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys)
 | 
						|
	{
 | 
						|
		if (pk.ForeignTable == fk.ForeignTable && pk.PrimaryTable != fk.PrimaryTable  && pk.PrimaryTable.Name != pk.ForeignTable.Name && ForeignRequired(pk))
 | 
						|
		{
 | 
						|
			//sAlias = GetAlias(dicAlias,pk.PrimaryTable);
 | 
						|
			sAlias = GetAlias(pk);
 | 
						|
			foreach(IColumn column in pk.PrimaryTable.Columns)
 | 
						|
			{
 | 
						|
				if ((!IsIn(column,pk.PrimaryColumns)) && (column.DataTypeName != "timestamp"))
 | 
						|
				{		
 | 
						|
					string sProp = ClassName(pk.PrimaryTable) + sAlias + "_" + PropertyName(column);
 | 
						|
					vlnProperty(CSLAType( column ),MemberName(sProp)
 | 
						|
						,sProp,InitializeValue( column ),GetDescription(column),true,column.IsInPrimaryKey,false,null,null,null,null);
 | 
						|
				} 
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
//	if (sKey == "")sKey="base.GetIdValue()";
 | 
						|
%>
 | 
						|
		// CSLATODO: Check <%=sFkClassName%>.GetIdValue to assure that the ID returned is unique
 | 
						|
		/// <summary>
 | 
						|
		/// Overrides Base GetIdValue - Used internally by CSLA to determine equality
 | 
						|
		/// </summary>
 | 
						|
		/// <returns>A Unique ID for the current <%=sFkClassName%></returns>
 | 
						|
		protected override object GetIdValue()
 | 
						|
		{
 | 
						|
			return My<%=_className%>Unique; // Absolutely Unique ID
 | 
						|
		}
 | 
						|
		// CSLATODO: Replace base <%=sFkClassName%>.ToString function as necessary
 | 
						|
		/// <summary>
 | 
						|
		/// Overrides Base ToString
 | 
						|
		/// </summary>
 | 
						|
		/// <returns>A string representation of current <%=sFkClassName%></returns>
 | 
						|
		//public override string ToString()
 | 
						|
		//{
 | 
						|
		//  return base.ToString();
 | 
						|
		//}<%
 | 
						|
		// IsValid and IsDirty
 | 
						|
		string sExtDirty = "";
 | 
						|
		string sExtValid = "";
 | 
						|
		foreach(IColumn col in fk.ForeignTable.Columns)
 | 
						|
		{
 | 
						|
			string sColumn = RequiredRelatedColumn(col);
 | 
						|
			if (sColumn != null){ // Let the Validation Rules handle IsDirty and IsValid - LazyLoad should be ignored.
 | 
						|
				sExtDirty += string.Format(" || ({0} == null ? false : {0}.IsDirtyList(list))",MemberName(sColumn));
 | 
						|
				sExtValid += string.Format(" && ({0} == null ? true : {0}.IsValidList(list))",MemberName(sColumn));
 | 
						|
			}
 | 
						|
		}
 | 
						|
		//if (sExtDirty!="")
 | 
						|
		vlnDirty(sExtDirty);
 | 
						|
		vlnValid(sExtValid);
 | 
						|
%>
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnValidationRulesFKList(IForeignKey fk,string sAlias)
 | 
						|
	{
 | 
						|
		string sFkClassListName =  ClassName( fk.PrimaryTable ) + ClassesName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sFkClassName;
 | 
						|
		if (fk.PrimaryTable == fk.ForeignTable)
 | 
						|
			sFkClassName =  ClassName( fk.ForeignTable ) + sAlias;
 | 
						|
		else
 | 
						|
			sFkClassName =  ClassName( fk.PrimaryTable ) + ClassName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sPrimaryTable = ClassName( fk.PrimaryTable );
 | 
						|
		//string sPrimaryLocal = LocalName(sPrimaryTable);
 | 
						|
		string sPrimaryLocal = LocalName(sFkClassName);
 | 
						|
%>
 | 
						|
		#region ValidationRules
 | 
						|
		public IVEHasBrokenRules HasBrokenRules
 | 
						|
		{<%=Debug("20070509.vlnValidationRulesFKList")%>
 | 
						|
			get
 | 
						|
			{
 | 
						|
				IVEHasBrokenRules hasBrokenRules = null;
 | 
						|
				foreach (<%=sFkClassName%> <%=sPrimaryLocal%> in this)
 | 
						|
					if ((hasBrokenRules = <%=sPrimaryLocal%>.HasBrokenRules) != null) return hasBrokenRules;
 | 
						|
				return hasBrokenRules;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		public BrokenRulesCollection BrokenRules
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				IVEHasBrokenRules hasBrokenRules = HasBrokenRules;
 | 
						|
				return (hasBrokenRules != null ? hasBrokenRules.BrokenRules : null);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnValidationRulesFKItem(IForeignKey fk,string sAlias)
 | 
						|
	{
 | 
						|
		string sFkClassListName =  ClassName( fk.PrimaryTable ) + ClassesName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sFkClassName =  ClassName( fk.PrimaryTable ) + ClassName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sPrimaryTable = ClassName( fk.PrimaryTable );
 | 
						|
		string sPrimaryLocal = LocalName(sPrimaryTable);
 | 
						|
%>
 | 
						|
		#region ValidationRules
 | 
						|
		[NonSerialized]
 | 
						|
		private bool _CheckingBrokenRules = false;
 | 
						|
		public IVEHasBrokenRules HasBrokenRules
 | 
						|
		{<%=Debug("20070509.vlnValidationRulesFKItem")%>
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if (_CheckingBrokenRules) return null;
 | 
						|
				if (BrokenRulesCollection.Count > 0) return this;
 | 
						|
				try
 | 
						|
				{
 | 
						|
					_CheckingBrokenRules = true;
 | 
						|
					IVEHasBrokenRules hasBrokenRules = null;<%
 | 
						|
				vlnBrokenRuleObjects(fk);
 | 
						|
%>
 | 
						|
					return hasBrokenRules;
 | 
						|
				}
 | 
						|
				finally
 | 
						|
				{
 | 
						|
					_CheckingBrokenRules = false;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		public BrokenRulesCollection BrokenRules
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				IVEHasBrokenRules hasBrokenRules = HasBrokenRules;
 | 
						|
				if (this.Equals(hasBrokenRules)) return BrokenRulesCollection;
 | 
						|
				return (hasBrokenRules != null ? hasBrokenRules.BrokenRules : null);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		protected override void AddBusinessRules()
 | 
						|
		{<%
 | 
						|
		foreach(IColumn column in fk.ForeignTable.Columns)
 | 
						|
		{
 | 
						|
			if (!(IsIn(column,fk.ForeignColumns) || column.IsInPrimaryKey || column.IsAutoKey || column.IsComputed))
 | 
						|
			{				
 | 
						|
				if (column.LanguageType=="string")
 | 
						|
				{
 | 
						|
					vlnAddRequired(column);
 | 
						|
					if (column.CharacterMaxLength < 2147483647)
 | 
						|
					vlnAddMaxLength(PropertyName(column),column.CharacterMaxLength);
 | 
						|
				}
 | 
						|
				if (CSLAType( column )=="SmartDate")
 | 
						|
				{
 | 
						|
					vlnAddRequired(column);
 | 
						|
					string sName = PropertyName(column);
 | 
						|
%>
 | 
						|
			ValidationRules.AddRule<<%=_className%>>(<%=sName%>Valid, "<%=sName%>");<%
 | 
						|
				}
 | 
						|
				string sObjectRequired = RequiredRelatedColumn(column);
 | 
						|
				if (sObjectRequired != null)
 | 
						|
				{
 | 
						|
%>
 | 
						|
			ValidationRules.AddRule<<%=_className%>>(<%=sObjectRequired%>Required, "<%=sObjectRequired%>");<%
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
%>
 | 
						|
			// CSLATODO:  Add other validation rules
 | 
						|
		}<%
 | 
						|
		foreach(IColumn column in fk.ForeignTable.Columns)
 | 
						|
		{
 | 
						|
			if (!(IsIn(column,fk.ForeignColumns) || column.IsInPrimaryKey || column.IsAutoKey || column.IsComputed))
 | 
						|
			{				
 | 
						|
				if (CSLAType( column )=="SmartDate")
 | 
						|
				{
 | 
						|
					string sName = PropertyName(column);
 | 
						|
					string sMember = MemberName(column);
 | 
						|
%>
 | 
						|
		private static bool <%=sName%>Valid(<%=_className%> target, Csla.Validation.RuleArgs e)
 | 
						|
		{
 | 
						|
			try
 | 
						|
			{
 | 
						|
				DateTime tmp = SmartDate.StringToDate(target.<%=sMember%>);
 | 
						|
			}
 | 
						|
			catch
 | 
						|
			{
 | 
						|
				e.Description = "Invalid Date";
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
			return true;
 | 
						|
		}<%
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		foreach(IColumn col in fk.ForeignTable.Columns)
 | 
						|
		{
 | 
						|
			string sColumn = RequiredRelatedColumn(col);
 | 
						|
			if (sColumn != null){ // Let the Validation Rules handle required fields
 | 
						|
				string sMemberRaw = MemberName(col);
 | 
						|
				string sMemberReq = MemberName(sColumn);
 | 
						|
%>
 | 
						|
		private static bool <%=sColumn%>Required(<%=_className%> target, Csla.Validation.RuleArgs e)
 | 
						|
		{
 | 
						|
			if (target.<%=sMemberRaw%> == 0 && target.<%=sMemberReq%> == null) // Required field missing
 | 
						|
			{
 | 
						|
				e.Description = "Required";
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
			return true;
 | 
						|
		}<%
 | 
						|
				
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
%>
 | 
						|
		// Sample data comparison validation rule
 | 
						|
		//private bool StartDateGTEndDate(object target, Csla.Validation.RuleArgs e)
 | 
						|
		//{
 | 
						|
		//	if (_started > _ended)
 | 
						|
		//	{
 | 
						|
		//		e.Description = "Start date can't be after end date";
 | 
						|
		//		return false;
 | 
						|
		//	}
 | 
						|
		//	else
 | 
						|
		//		return true;
 | 
						|
		//}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnAuthorizationRulesFKItem(IForeignKey fk,string sAlias)
 | 
						|
	{
 | 
						|
		string sFkClassListName =  ClassName( fk.PrimaryTable ) + ClassesName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sFkClassName =  ClassName( fk.PrimaryTable ) + ClassName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sPrimaryTable = ClassName( fk.PrimaryTable );
 | 
						|
		string sPrimaryLocal = LocalName(sPrimaryTable);
 | 
						|
%>
 | 
						|
		#region Authorization Rules
 | 
						|
		protected override void AddAuthorizationRules()
 | 
						|
		{
 | 
						|
			//CSLATODO: Who can read/write which fields<%
 | 
						|
		foreach(IColumn column in fk.ForeignTable.Columns)
 | 
						|
		{
 | 
						|
			if (!(IsIn(column,fk.ForeignColumns)) && column.DataTypeName != "timestamp")
 | 
						|
			{				
 | 
						|
%>
 | 
						|
			//AuthorizationRules.AllowRead(<%=PropertyName(column)%>, "<Role(s)>");<%			
 | 
						|
				if (!(column.IsInPrimaryKey || column.IsAutoKey || column.IsComputed))
 | 
						|
				{
 | 
						|
%>
 | 
						|
			//AuthorizationRules.AllowWrite(<%=PropertyName(column)%>, "<Role(s)>");<%			
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
%>
 | 
						|
		}
 | 
						|
		public static bool CanAddObject()
 | 
						|
		{
 | 
						|
			// CSLATODO: Can Add Authorization
 | 
						|
			//return Csla.ApplicationContext.User.IsInRole("ProjectManager");
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
		public static bool CanGetObject()
 | 
						|
		{
 | 
						|
			// CSLATODO: CanGet Authorization
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
		public static bool CanDeleteObject()
 | 
						|
		{
 | 
						|
			// CSLATODO: CanDelete Authorization
 | 
						|
			//bool result = false;
 | 
						|
			//if (Csla.ApplicationContext.User.IsInRole("ProjectManager"))result = true;
 | 
						|
			//if (Csla.ApplicationContext.User.IsInRole("Administrator"))result = true;
 | 
						|
			//return result;
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
		public static bool CanEditObject()
 | 
						|
		{
 | 
						|
			// CSLATODO: CanEdit Authorization
 | 
						|
			//return Csla.ApplicationContext.User.IsInRole("ProjectManager");
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnFactoryMethodsFKItem(IForeignKey fk,string sAlias)
 | 
						|
	{
 | 
						|
		string sFkClassListName =  ClassName( fk.PrimaryTable ) + ClassesName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sFkClassName =  ClassName( fk.PrimaryTable ) + ClassName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sPrimaryTable = ClassName( fk.PrimaryTable );
 | 
						|
		string sPrimaryLocal = LocalName(sPrimaryTable);
 | 
						|
		string sKeysTypes="";
 | 
						|
		string sKeys="";
 | 
						|
		string sValues="";
 | 
						|
		string sValues2="";
 | 
						|
		string sep="";
 | 
						|
		string sInit="";
 | 
						|
		string sep2="";
 | 
						|
		Hashtable dicAlias = new Hashtable();
 | 
						|
		ArrayList pks = new ArrayList();
 | 
						|
		foreach(IColumn column in fk.ForeignTable.Columns)
 | 
						|
		{
 | 
						|
			if (!IsIn(column,fk.ForeignColumns))
 | 
						|
			{				
 | 
						|
				if (IsRequired(column) && !column.IsComputed && !column.IsAutoKey)
 | 
						|
				{
 | 
						|
					sKeysTypes+=sep+FormatColumn("{!type} {!local}",column);
 | 
						|
					sKeys+=sep+FormatColumn("{!local}",column);
 | 
						|
					if (IsRelObj(column))
 | 
						|
						sValues+=sep + FormatColumn("{!local}",column); // 20070301						
 | 
						|
					else
 | 
						|
						sValues+=sep+RelatedObject(fk,column);
 | 
						|
					if (IsRelObj(column))
 | 
						|
						sValues2+=sep + FormatColumn("{!type} {!local}",column); // 20070301						
 | 
						|
					else
 | 
						|
						sValues2+=sep + RelatedObjectType2(fk,column); // 20070301
 | 
						|
					foreach(IForeignKey pk in column.ForeignKeys)
 | 
						|
						if (!pks.Contains(pk))
 | 
						|
						{
 | 
						|
							pks.Add(pk.Name);
 | 
						|
							//sValues2+=" /* " + pk.Name + " */ ";
 | 
						|
						}
 | 
						|
					sep=", ";
 | 
						|
					if (!column.IsInForeignKey || IsRelObj(column)){
 | 
						|
						//if (CSLAType(column)=="SmartDate")
 | 
						|
						//	sInit+=sep2 + FormatColumn("\t\t{member} = new SmartDate({local});",column);
 | 
						|
						//else
 | 
						|
						if (IsRelObj(column))
 | 
						|
							sInit+=sep2 + FormatColumn("\t\t\t{!member} = {!local};",column);							
 | 
						|
						else
 | 
						|
							sInit+=sep2 + FormatColumn("\t\t\t{member} = {local};",column);
 | 
						|
						sep2="\r\n";
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						IForeignKey pk = column.ForeignKeys[0];
 | 
						|
						if (pk == FKParentFK(column.Table))
 | 
						|
						{
 | 
						|
							IColumn colf = RelatedColumnF(column,pk);
 | 
						|
							if (colf != null){
 | 
						|
								sInit+=sep2 + FormatColumn("\t\t\t{member} = ",column) + FormatColumn("{rmember};",colf);
 | 
						|
								sep2="\r\n";
 | 
						|
							}
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		// Foreign Key Related Table Fields
 | 
						|
		//Hashtable dicAlias = new Hashtable();
 | 
						|
		foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys)
 | 
						|
		{
 | 
						|
			if (pks.Contains(pk.Name) && pk.ForeignTable == fk.ForeignTable && pk.PrimaryTable.Name != pk.ForeignTable.Name && pk.Name != fk.Name && ForeignRequired(pk))
 | 
						|
			{
 | 
						|
				//sAlias = GetAlias(dicAlias,pk.PrimaryTable);
 | 
						|
				sAlias = GetNewAlias(fk,pk);
 | 
						|
				foreach(IColumn column in pk.PrimaryTable.Columns)
 | 
						|
				{
 | 
						|
					IColumn col = RelatedColumn(column,pk);
 | 
						|
					col =col.Table.Columns[col.Name];
 | 
						|
					if (!IsRelObj(col))
 | 
						|
					{
 | 
						|
						string sProp = ClassName(pk.PrimaryTable) + sAlias + "_" + PropertyName(column);
 | 
						|
						string sLocal = LocalName(ClassName(pk.PrimaryTable))+ sAlias;
 | 
						|
						string sMember = MemberName(sProp);
 | 
						|
						if (IsIn(column,pk.PrimaryColumns))
 | 
						|
						{
 | 
						|
							sInit+=sep2 + "\t\t\t" + MemberName(RelatedColumn(column,pk)) + " = " + sLocal + "." + PropertyName(column) + ";";
 | 
						|
							sep2="\r\n";
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							if (pk.PrimaryTable != fk.PrimaryTable)
 | 
						|
							{
 | 
						|
								if (column.DataTypeName != "timestamp"){
 | 
						|
									if (CSLAType(column)=="SmartDate")
 | 
						|
										sInit+=sep2 + "\t\t\t" + sMember + " = new SmartDate(" + sLocal + "." + PropertyName(column) + ");";
 | 
						|
									else
 | 
						|
										sInit+=sep2 + "\t\t\t" + sMember + " = " + sLocal + "." + PropertyName(column) + ";";
 | 
						|
									sep2="\r\n";
 | 
						|
								}
 | 
						|
							} 
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				// WriteLine("pk={0} f={1} p={2}",pk.Name,pk.ForeignTable.Name,pk.PrimaryTable.Name);
 | 
						|
			}
 | 
						|
		}
 | 
						|
%>
 | 
						|
		#region Factory Methods
 | 
						|
		public int CurrentEditLevel
 | 
						|
		{ get { return EditLevel; } }
 | 
						|
		private static int _<%=_className%>Unique = 0;
 | 
						|
		private static int <%=_className%>Unique
 | 
						|
		{ get { return ++_<%=_className%>Unique; } }
 | 
						|
		private int _My<%=_className%>Unique = <%=_className%>Unique;
 | 
						|
		public int My<%=_className%>Unique // Absolutely Unique ID - Editable FK
 | 
						|
		{ get { return _My<%=_className%>Unique; } }
 | 
						|
		internal static <%=sFkClassName%> New(<%=sKeysTypes%>)
 | 
						|
		{
 | 
						|
			return new <%=sFkClassName%>(<%=sValues%>);
 | 
						|
		}
 | 
						|
		internal static <%=sFkClassName%> Get(SafeDataReader dr)
 | 
						|
		{
 | 
						|
			return new <%=sFkClassName%>(dr);
 | 
						|
		}
 | 
						|
		public <%=sFkClassName%>()
 | 
						|
		{
 | 
						|
			MarkAsChild();
 | 
						|
<%=FormatColumns("{member} = {class}.Next{prop};",AutoKey(fk),"\r\n","\t\t\t")%>
 | 
						|
<%=FormatColumns("{member} = " + extMName + ".Default{prop};",HasDefaults(fk),"\r\n","\t\t\t")%>
 | 
						|
			ValidationRules.CheckRules();
 | 
						|
		}<%
 | 
						|
	if (sValues2 != "") {
 | 
						|
		//if (sInit=="")sInit = "// No Initialization";
 | 
						|
		//else sInit = "// Initialization\r\n" + sInit;
 | 
						|
%>
 | 
						|
		private <%=sFkClassName%>(<%=sValues2%>)
 | 
						|
		{
 | 
						|
			MarkAsChild();
 | 
						|
			// CSLATODO: Add any initialization & defaults
 | 
						|
<%=FormatColumns("\t\t\t{member} = {class}.Next{prop};\r\n",AutoKey(fk),"","")%><%=FormatColumns("{member} = " + extMName + ".Default{prop};",HasDefaults(fk),"\r\n","\t\t\t")%>
 | 
						|
<%=sInit%>
 | 
						|
			ValidationRules.CheckRules();
 | 
						|
		}<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		internal <%=sFkClassName%>(SafeDataReader dr)
 | 
						|
		{
 | 
						|
			MarkAsChild();
 | 
						|
			Fetch(dr);
 | 
						|
		}
 | 
						|
		private bool _Disposed = false;
 | 
						|
		private static int _CountCreated = 0;
 | 
						|
		private static int _CountDisposed = 0;
 | 
						|
		private static int _CountFinalized = 0;
 | 
						|
		private static int IncrementCountCreated
 | 
						|
		{ get { return ++_CountCreated; } }
 | 
						|
		private int _CountWhenCreated = IncrementCountCreated;
 | 
						|
		public static int CountCreated
 | 
						|
		{ get { return _CountCreated; } }
 | 
						|
		public static int CountNotDisposed
 | 
						|
		{ get { return _CountCreated - _CountDisposed; } }
 | 
						|
		public static int CountNotFinalized
 | 
						|
		{ get { return _CountCreated - _CountFinalized; } }
 | 
						|
		~<%=sFkClassName%>()
 | 
						|
		{
 | 
						|
			_CountFinalized++;
 | 
						|
		}
 | 
						|
		public void Dispose()
 | 
						|
		{
 | 
						|
			if (_Disposed) return;
 | 
						|
			_CountDisposed++;
 | 
						|
			_Disposed = true;
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnDataAccessPortalFKItem(IForeignKey fk,string sAlias)
 | 
						|
	{
 | 
						|
		string sFkClassListName =  ClassName( fk.PrimaryTable ) + ClassesName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sFkClassName =  ClassName( fk.PrimaryTable ) + ClassName( fk.ForeignTable ) + sAlias;
 | 
						|
		string sPrimaryTable = ClassName( fk.PrimaryTable );
 | 
						|
		string sPrimaryLocal = LocalName(sPrimaryTable);
 | 
						|
		IColumn colf1 = fk.ForeignColumns[0];
 | 
						|
		colf1=colf1.Table.Columns[colf1.Name];
 | 
						|
		sPrimaryLocal = FormatColumn("{!local}",colf1);
 | 
						|
		string sClassName = ClassName( fk.ForeignTable );
 | 
						|
		//string sKeysTypes="";
 | 
						|
		//string sKeys="";
 | 
						|
		//string sValues="";
 | 
						|
		//string sValues2="";
 | 
						|
		string sepi="";
 | 
						|
		string sepu="";
 | 
						|
		string sepd="";
 | 
						|
		string sepr="";
 | 
						|
		string sRead="";
 | 
						|
		string sInsert="";
 | 
						|
		string sUpdate="";
 | 
						|
		string sDelete="";
 | 
						|
		string sTimestamp="";
 | 
						|
				try
 | 
						|
				{
 | 
						|
					foreach(IColumn column in fk.ForeignTable.Columns)
 | 
						|
					{
 | 
						|
						if (column.DataTypeName=="timestamp")
 | 
						|
							sTimestamp=FormatColumn("{member} = ",column);
 | 
						|
						if (!IsIn(column,fk.ForeignColumns))
 | 
						|
						{				
 | 
						|
							sRead+=sepr+FormatColumn(dicRead,column,"\t\t\t\t","");
 | 
						|
							sepr="\r\n";
 | 
						|
							string sRefI = ParentRef(column);
 | 
						|
							string sRefU = ParentRefU2(column);
 | 
						|
							if (sRefI==null)
 | 
						|
							{
 | 
						|
								if (column.IsComputed || column.IsAutoKey)
 | 
						|
									sRefU = sRefI = FormatColumn("ref {?dbprefix}{member}{?dbsuff}",column);
 | 
						|
								else
 | 
						|
									//if (column.IsInPrimaryKey) // 20070326
 | 
						|
									//	sRef=FormatColumn("{?dbprefix}{!membercolumn}{?dbsuff}",column);// 20070323
 | 
						|
									//else
 | 
						|
									if (FormatColumn("{!type}",column)==ClassName(fk.ForeignTable))
 | 
						|
									{
 | 
						|
										sRefI = FormatColumn("{?dbprefix}{!membercolumn}{?dbsuff}",column);// 20070326
 | 
						|
										sRefU = FormatColumn("{?dbprefix}{member}{?dbsuff}",column);// 20070326
 | 
						|
									}
 | 
						|
									else
 | 
						|
									{
 | 
						|
										sRefI=FormatColumn("{?dbprefix}{!member}{?dbsuff}",column);// 20070326
 | 
						|
										sRefU=FormatColumn("{?dbprefix}{member}{?dbsuff}",column);// 20070326
 | 
						|
								}
 | 
						|
							}
 | 
						|
							sUpdate+=sepu + sRefU;
 | 
						|
							sepu=", ";
 | 
						|
							if (!column.IsComputed)// && !column.IsAutoKey
 | 
						|
							{
 | 
						|
								sInsert+=sepi+sRefI;
 | 
						|
								sepi=", ";
 | 
						|
							}
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							string sRefI;
 | 
						|
							string sRefU;
 | 
						|
							if (IsRelObj(column))
 | 
						|
							{
 | 
						|
								sRefI = FormatColumn("{?dbprefix}{!local}{?dbsuff}",column);
 | 
						|
								string sType = FormatColumn("{ctype}",column);
 | 
						|
								if(sType.Contains("?"))
 | 
						|
									sRefU = FormatColumn("{?dbprefix}{!local}{?dbsuff} != null ? ({ctype}) {?dbprefix}{!local}{?dbsuff}.{?dbprefix}{prop}{?dbsuff} : ({ctype}) null",column);
 | 
						|
								else
 | 
						|
									sRefU = FormatColumn("{?dbprefix}{!localcolumn}{?dbsuff}",column);
 | 
						|
							}
 | 
						|
							else
 | 
						|
								sRefI = sRefU = FormatColumn("{?dbprefix}{rmember}{?dbsuff}",RelatedColumn(column,fk));
 | 
						|
							sInsert+=sepi + sRefI;
 | 
						|
							sUpdate+=sepu + sRefU;
 | 
						|
							sepi=", ";
 | 
						|
							sepu=", ";
 | 
						|
							//sepd=", ";
 | 
						|
						}
 | 
						|
					}
 | 
						|
					foreach(IColumn column in fk.ForeignTable.PrimaryKeys)
 | 
						|
					{
 | 
						|
						if (IsIn(column,fk.ForeignColumns))
 | 
						|
							sDelete+=sepd+FormatColumn("{!localcolumn}",column);
 | 
						|
							//sDelete+=sepd+FormatColumn("{rmember}",RelatedColumn(column,fk));
 | 
						|
						else
 | 
						|
							sDelete+=sepd+FormatColumn("{member}",column);
 | 
						|
						sepd=", ";
 | 
						|
					}
 | 
						|
				}
 | 
						|
				catch(Exception ex)
 | 
						|
				{
 | 
						|
					output.write("\r\n>>>ERROR>>>> " + ex.Message);
 | 
						|
				}
 | 
						|
		// Foreign Key Related Table Fields
 | 
						|
		Hashtable dicAlias = new Hashtable();
 | 
						|
		foreach(IForeignKey pk in fk.ForeignTable.ForeignKeys)
 | 
						|
		{
 | 
						|
			if (pk.ForeignTable == fk.ForeignTable && pk.PrimaryTable != fk.PrimaryTable  && pk.PrimaryTable != pk.ForeignTable && ForeignRequired(pk))
 | 
						|
			{
 | 
						|
				//sAlias = GetAlias(dicAlias,pk.PrimaryTable);
 | 
						|
				sAlias = GetAlias(pk);
 | 
						|
				//foreach(IColumn col in pk.PrimaryColumns)
 | 
						|
				//{
 | 
						|
				//}
 | 
						|
				foreach(IColumn column in pk.PrimaryTable.Columns)
 | 
						|
				{
 | 
						|
					if (!IsIn(column,pk.PrimaryColumns) && column.DataTypeName != "timestamp" && !column.IsInPrimaryKey)
 | 
						|
					{				
 | 
						|
						sRead+=sepr+FormatColumn(dicRead,column,"\t\t\t\t",sAlias);
 | 
						|
						sepr="\r\n";
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
%>
 | 
						|
		#region Data Access Portal
 | 
						|
		private void Fetch(SafeDataReader dr)
 | 
						|
		{
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_subclassName%>.FetchDR", GetHashCode());
 | 
						|
			try
 | 
						|
			{
 | 
						|
<%=sRead%>
 | 
						|
			}
 | 
						|
			catch (Exception ex) // FKItem Fetch
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_subclassName%>.FetchDR", ex);
 | 
						|
				throw new DbCslaException("<%=_subclassName%>.Fetch", ex);
 | 
						|
			}
 | 
						|
			MarkOld();
 | 
						|
		}
 | 
						|
		internal void Insert(<%=sPrimaryTable%> <%=sPrimaryLocal%>)
 | 
						|
		{
 | 
						|
			// if we're not dirty then don't update the database
 | 
						|
			if (!this.IsDirty) return;
 | 
						|
			SqlConnection cn = (SqlConnection)ApplicationContext.LocalContext["cn"];
 | 
						|
			<%=sTimestamp%><%=sClassName%>.Add(cn, <%=sInsert%>);
 | 
						|
			MarkOld();
 | 
						|
		}
 | 
						|
		internal void Update(<%=sPrimaryTable%> <%=sPrimaryLocal%>)<%=Debug("// 20071023.4 Update")%>
 | 
						|
		{
 | 
						|
			// if we're not dirty then don't update the database
 | 
						|
			if (!this.IsDirty) return;
 | 
						|
			SqlConnection cn = (SqlConnection)ApplicationContext.LocalContext["cn"];
 | 
						|
			<%=sTimestamp%><%=sClassName%>.Update(cn, <%=sUpdate%>);
 | 
						|
			MarkOld();
 | 
						|
		}
 | 
						|
		internal void DeleteSelf(<%=sPrimaryTable%> <%=sPrimaryLocal%>)
 | 
						|
		{
 | 
						|
			// if we're not dirty then don't update the database
 | 
						|
			if (!this.IsDirty) return;
 | 
						|
			// if we're new then don't update the database
 | 
						|
			if (this.IsNew) return;
 | 
						|
			SqlConnection cn = (SqlConnection)ApplicationContext.LocalContext["cn"];
 | 
						|
			<%=sClassName%>.Remove(cn, <%=sDelete%>);
 | 
						|
			MarkNew();
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnConvertorFKItem()
 | 
						|
	{
 | 
						|
%>
 | 
						|
	#region Converter
 | 
						|
	internal class <%=_className%>Converter : ExpandableObjectConverter
 | 
						|
	{
 | 
						|
		public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destType)
 | 
						|
		{
 | 
						|
			if (destType == typeof(string) && value is <%=_className%>)
 | 
						|
			{
 | 
						|
				// Return the ToString value
 | 
						|
				return ((<%=_className%>)value).ToString();
 | 
						|
			}
 | 
						|
			return base.ConvertTo(context, culture, value, destType);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	#endregion<%
 | 
						|
	}
 | 
						|
	private void vlnFactoryMethodsInfoList(IColumns columns)
 | 
						|
	{
 | 
						|
		string sMember = MemberName(_className);
 | 
						|
%>
 | 
						|
		#region Factory Methods
 | 
						|
		public static <%=_className%> <%=sMember%> = null;
 | 
						|
		/// <summary>
 | 
						|
		/// Return a list of all <%=_subclassName%>.
 | 
						|
		/// </summary>
 | 
						|
		public static <%=_className%> Get()
 | 
						|
		{
 | 
						|
			try
 | 
						|
			{
 | 
						|
				if (<%=sMember%> != null)
 | 
						|
					return <%=sMember%>;
 | 
						|
				<%=_className%> tmp = DataPortal.Fetch<<%=_className%>>();
 | 
						|
				<%=_subclassName%>.AddList(tmp);
 | 
						|
				tmp.AddEvents();
 | 
						|
				<%=sMember%> = tmp;
 | 
						|
				return tmp;
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				throw new DbCslaException("Error on <%=_className%>.Get", ex);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		/// <summary>
 | 
						|
		/// Reset the list of all <%=_subclassName%>.
 | 
						|
		/// </summary>
 | 
						|
		public static void Reset()
 | 
						|
		{
 | 
						|
			<%=sMember%> = null;
 | 
						|
		}<%
 | 
						|
// ForeignKeys - List Foreign Keys - May want to create stored procedures
 | 
						|
%>
 | 
						|
		// CSLATODO: Add alternative gets - 
 | 
						|
		//public static <%=_className%> Get(<criteria>)
 | 
						|
		//{
 | 
						|
		//	try
 | 
						|
		//	{
 | 
						|
		//  	return DataPortal.Fetch<<%=_className%>>(new FilteredCriteria(<criteria>));
 | 
						|
		//	}
 | 
						|
		//	catch (Exception ex)
 | 
						|
		//	{
 | 
						|
		//		throw new DbCslaException("Error on <%=_className%>.Get", ex);
 | 
						|
		//	}
 | 
						|
		//}<%
 | 
						|
		ProcessFKAlias(_workingTable,new ProcessFK(FKGet));
 | 
						|
//		ArrayList lstByNames = new ArrayList();
 | 
						|
//		foreach(IForeignKey FK in _workingTable.ForeignKeys)
 | 
						|
//		{
 | 
						|
//			if (FK.ForeignTable == _workingTable)
 | 
						|
//			{
 | 
						|
//				if (!lstByNames.Contains(FK.PrimaryTable.Name))
 | 
						|
//				{
 | 
						|
//					FKGet(FK);
 | 
						|
//					lstByNames.Add(FK.PrimaryTable.Name);
 | 
						|
//				}
 | 
						|
//			}
 | 
						|
//		}	
 | 
						|
%>
 | 
						|
		private <%=_className%>()
 | 
						|
		{ /* require use of factory methods */ }
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void FKGet(IForeignKey FK,string sAlias)
 | 
						|
	{
 | 
						|
		//string sBy = ClassName(FK.PrimaryTable) + sAlias;
 | 
						|
		//string sKeyTypes = FormatColumns("{ctype} {local}",FK.PrimaryTable.PrimaryKeys,",","");
 | 
						|
		//string sKeys = FormatColumns("{local}",FK.PrimaryTable.PrimaryKeys,",","");
 | 
						|
		string sBy = FormatColumns("{name}",FK.ForeignColumns,"_","");
 | 
						|
		string sBy2 = "By" + sBy;
 | 
						|
		if (FK.PrimaryTable == FK.ForeignTable)sBy2=ChildrenName(FK);
 | 
						|
		string sKeyTypes = FormatColumns("{ctype} {local}",FK.ForeignColumns,",","");
 | 
						|
		string sKeys = FormatColumns("{local}",FK.ForeignColumns,",","");
 | 
						|
%>
 | 
						|
		public static <%=_className%> Get<%=sBy2%>(<%=sKeyTypes%>)
 | 
						|
		{
 | 
						|
			try
 | 
						|
			{
 | 
						|
				<%=_className%> tmp = DataPortal.Fetch<<%=_className%>>(new <%=sBy%>Criteria(<%=sKeys%>));
 | 
						|
				<%=_subclassName%>.AddList(tmp);
 | 
						|
				tmp.AddEvents();
 | 
						|
				return tmp;
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				throw new DbCslaException("Error on <%=_className%>.Get<%=sBy2%>", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
	}
 | 
						|
	private void vlnDataAccessPortalInfoList(IColumns columns)
 | 
						|
	{ 
 | 
						|
%>
 | 
						|
		#region Data Access Portal
 | 
						|
		private void DataPortal_Fetch()
 | 
						|
		{
 | 
						|
			this.RaiseListChangedEvents = false;
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_className%>.DataPortal_Fetch", GetHashCode());
 | 
						|
			try
 | 
						|
			{
 | 
						|
				using (SqlConnection cn = Database.<%=_dbConnection%>_SqlConnection)
 | 
						|
				{
 | 
						|
					using (SqlCommand cm = cn.CreateCommand())
 | 
						|
					{
 | 
						|
						cm.CommandType = CommandType.StoredProcedure;
 | 
						|
						cm.CommandText = "get<%=ClassesName(_workingTable)%>";
 | 
						|
						using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
 | 
						|
						{
 | 
						|
							IsReadOnly = false;
 | 
						|
							while (dr.Read()) this.Add(new <%=_subclassName%>(dr));
 | 
						|
							IsReadOnly = true;
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.DataPortal_Fetch", ex);
 | 
						|
				throw new DbCslaException("<%=_className%>.DataPortal_Fetch", ex);
 | 
						|
			}
 | 
						|
			this.RaiseListChangedEvents = true;
 | 
						|
		}<%
 | 
						|
		ProcessFKAlias(_workingTable,new ProcessFK(FKFetch));
 | 
						|
//		ArrayList lstTableNames = new ArrayList();
 | 
						|
//		foreach(IForeignKey FK in _workingTable.ForeignKeys)
 | 
						|
//		{
 | 
						|
//			if (FK.ForeignTable == _workingTable)
 | 
						|
//			{
 | 
						|
//				if (!lstTableNames.Contains(FK.PrimaryTable.Name))
 | 
						|
//				{
 | 
						|
//					FKFetch(FK);
 | 
						|
//					lstTableNames.Add(FK.PrimaryTable.Name);
 | 
						|
//				}
 | 
						|
//			}
 | 
						|
//		}
 | 
						|
%>
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void FKFetch(IForeignKey FK,string sAlias)
 | 
						|
	{
 | 
						|
		string sClassF = ClassName(FK.ForeignTable);
 | 
						|
		//string sClassP = ClassName(FK.PrimaryTable)+sAlias;
 | 
						|
		//string sBy = ForeignKeyName(FK);
 | 
						|
		//string sKeyTypes = FormatColumns("{ctype} {local}",FK.PrimaryTable.PrimaryKeys,",","");
 | 
						|
		string sClassP = FormatColumns("{name}",FK.ForeignColumns,"_","");
 | 
						|
		string sBy = ClassesName(_workingTable) + "By" + FormatColumns("{name}",FK.ForeignColumns,"_","");
 | 
						|
		if (FK.ForeignTable == FK.PrimaryTable)sBy = ChildName(FK) + ClassesName(_workingTable);
 | 
						|
		string sKeyTypes = FormatColumns("{ctype} {local}",FK.ForeignColumns,",","");
 | 
						|
		//string sKeys = FormatColumns("{local}",FK.ForeignColumns,",","");
 | 
						|
%>
 | 
						|
		[Serializable()]
 | 
						|
		private class <%=sClassP%>Criteria
 | 
						|
		{
 | 
						|
			public <%=sClassP%>Criteria(<%=sKeyTypes%>)
 | 
						|
			{
 | 
						|
<%=FormatColumns("{member} = {local};",FK.ForeignColumns,"\r\n","\t\t\t\t")%>
 | 
						|
			}<%
 | 
						|
		foreach(IColumn c in FK.ForeignColumns)
 | 
						|
		{
 | 
						|
			string sMember=FormatColumn("{member}",c);
 | 
						|
			string sProp=FormatColumn("{prop}",c);
 | 
						|
			string sType=FormatColumn("{ctype}",c);
 | 
						|
%>
 | 
						|
			private <%=sType%> <%=sMember%>;
 | 
						|
			public <%=sType%> <%=sProp%>
 | 
						|
			{
 | 
						|
				get { return <%=sMember%>; }
 | 
						|
				set { <%=sMember%> = value; }
 | 
						|
			}<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		}
 | 
						|
		private void DataPortal_Fetch(<%=sClassP%>Criteria criteria)
 | 
						|
		{
 | 
						|
			this.RaiseListChangedEvents = false;
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_className%>.DataPortal_Fetch<%=sClassP%>", GetHashCode());
 | 
						|
			try
 | 
						|
			{
 | 
						|
				using (SqlConnection cn = Database.<%=_dbConnection%>_SqlConnection)
 | 
						|
				{
 | 
						|
					using (SqlCommand cm = cn.CreateCommand())
 | 
						|
					{
 | 
						|
						cm.CommandType = CommandType.StoredProcedure;
 | 
						|
						cm.CommandText = "get<%=sBy%>";
 | 
						|
						<%=FormatColumns("{ifLogic@}cm.Parameters.AddWithValue(\"{@}\", " + "criteria.{prop});",FK.ForeignColumns,"\r\n\t\t\t","")%>
 | 
						|
						using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
 | 
						|
						{
 | 
						|
							IsReadOnly = false;
 | 
						|
							while (dr.Read()) this.Add(new <%=_subclassName%>(dr));
 | 
						|
							IsReadOnly = true;
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.DataPortal_Fetch<%=sClassP%>", ex);
 | 
						|
				throw new DbCslaException("<%=_className%>.DataPortal_Fetch", ex);
 | 
						|
			}
 | 
						|
			this.RaiseListChangedEvents = true;
 | 
						|
		}<%
 | 
						|
	}
 | 
						|
	private void vlnRelObjProperty(IColumn column,bool bReadOnly,bool bInfo)
 | 
						|
	{
 | 
						|
		if (IsRelObj(column))
 | 
						|
		{
 | 
						|
			string sProp=RelObjProp(column);
 | 
						|
			string sMember=MemberName(sProp);
 | 
						|
			string sCheck=FormatColumn("\r\n\t\t\t\tif ({!member} == null && {member} != {!empty}) {!member} = {!type}" + (bInfo?"Info":"") + ".Get({!typecast}{member});",column);
 | 
						|
			string sCheck2=null;
 | 
						|
			string sCheck3=null;
 | 
						|
			if (column.IsNullable)
 | 
						|
			{
 | 
						|
				sCheck2=FormatColumn("\r\n\t\t\t\t\t{member} = (value == null ? null : ({ctype})value.{!column});",column);
 | 
						|
				sCheck3=FormatColumn("({!member} == null ? {member} : ({ctype}){!member}.{!column}) != (value == null ? null : ({ctype})value.{!column})",column);
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				sCheck2=FormatColumn("\r\n\t\t\t\t\t{member} = value.{!column};// Update underlying data field",column);
 | 
						|
				sCheck3=FormatColumn("{!member} != value",column);
 | 
						|
			}
 | 
						|
			vlnProperty(RelObjType( column ) + (bInfo?"Info":"") ,sMember
 | 
						|
				,sProp,";"+DebugLine("20070501.4"),"",bReadOnly,column.IsInPrimaryKey,false,null,sCheck,sCheck2,sCheck3);
 | 
						|
			//if (sProp.StartsWith("My"))_refreshMine += string.Format("\t\t\t{0} = null;\r\n",sMember);
 | 
						|
			//if (sProp.StartsWith("My"))AddRefreshMine(sMember);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	private void AddRefreshMine(string sMember)
 | 
						|
	{
 | 
						|
		_refreshMine += string.Format("//RHM Removed 20090724 - Duplicates function of code above.\r\n",sMember);
 | 
						|
		_refreshMine += string.Format("//                     - Dispose caused error when a new step was added.\r\n",sMember);
 | 
						|
		_refreshMine += string.Format("//                     - Resequence of transitions did not work properly.\r\n",sMember);
 | 
						|
		_refreshMine += string.Format("//\t\t\tif({0} != null)\r\n",sMember);
 | 
						|
		_refreshMine += string.Format("//\t\t\t{{\r\n");
 | 
						|
		_refreshMine += string.Format("//\t\t\t\t{0}.Dispose();// Dispose related value\r\n",sMember);
 | 
						|
		_refreshMine += string.Format("//\t\t\t\t{0} = null;// Reset related value\r\n",sMember);
 | 
						|
		_refreshMine += string.Format("//\t\t\t}}\r\n");
 | 
						|
	}
 | 
						|
	private void vlnBusinessMethodsInfo(IColumns columns)
 | 
						|
	{
 | 
						|
		_refreshMine="";
 | 
						|
//		string sMember = MemberName(sEditable);
 | 
						|
//		string sLocal = LocalName(sEditable);
 | 
						|
//		string sPKeys = FormatColumns(sLocal + ".{prop}",_workingTable.PrimaryKeys,", ","");
 | 
						|
%>
 | 
						|
		#region Business Methods
 | 
						|
		private string _ErrorMessage = string.Empty;
 | 
						|
		public string ErrorMessage
 | 
						|
		{
 | 
						|
			get { return _ErrorMessage; }
 | 
						|
		}
 | 
						|
		protected <%=ClassName( _workingTable )%> _Editable;
 | 
						|
		private IVEHasBrokenRules HasBrokenRules
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				IVEHasBrokenRules hasBrokenRules = null;
 | 
						|
				if (_Editable != null)
 | 
						|
					hasBrokenRules = _Editable.HasBrokenRules;
 | 
						|
				return hasBrokenRules;
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
		//vlnInfoParent(_workingTable);//20070208
 | 
						|
		foreach(IColumn column in ExcludedColumns(columns,new Filter(Computed)))
 | 
						|
		{
 | 
						|
			string sCheck=(IsRelObj(column)?FormatColumn("\r\n\t\t\t\tif ({!member} != null) {member} = {!member}.{!column};",column):null);
 | 
						|
			vlnProperty(CSLAType( column ),MemberName(column)
 | 
						|
				,PropertyName(column),InitializeValue( column ),GetDescription(column),true,column.IsInPrimaryKey,false,null,sCheck,null,null);
 | 
						|
			vlnRelObjProperty(column,true,true);
 | 
						|
		}
 | 
						|
		Hashtable dicAlias = new Hashtable();
 | 
						|
		foreach(IForeignKey FK in _workingTable.ForeignKeys)
 | 
						|
		{
 | 
						|
			if (FK.PrimaryTable == _workingTable)
 | 
						|
			{
 | 
						|
				//string sAlias = GetAlias(dicAlias,FK.ForeignTable);
 | 
						|
				string sAlias = GetAlias(FK);
 | 
						|
				string sClass = FKClassName(FK);
 | 
						|
				string sClasses = FKClassesName(FK);
 | 
						|
				if (!OneToOne(FK))
 | 
						|
					FKPropertyList(ClassName(FK.ForeignTable),sClasses,FK,sAlias);
 | 
						|
				else
 | 
						|
				{
 | 
						|
					vlnProperty("int",MemberName(sClass) + sAlias + "Count" ,sClass + sAlias + "Count", " = 0;",
 | 
						|
						"Count of " + sClasses + " for this " + ClassName(_workingTable),true,false,false,null,null,null,null);
 | 
						|
					FKPropertyInfo(ClassName(FK.ForeignTable),sClasses,FK,sAlias);
 | 
						|
					// This line was added to reset the count if the Content object was changed
 | 
						|
					_refreshMine += string.Format("\t\t\t{0} = -1;// Reset Count\r\n",MemberName(sClass) + sAlias + "Count");
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		vlnToString(columns);
 | 
						|
		vlnGetIDValue(_workingTable.PrimaryKeys);		
 | 
						|
%>
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void FKPropertyList(string sClass,string sClasses,IForeignKey FK,string sAlias)
 | 
						|
	{
 | 
						|
		string sKeys = FormatColumns("{member}",FK.PrimaryColumns,",","");
 | 
						|
		string sMember = MemberName(sClasses) + sAlias;
 | 
						|
		string sCountMember = MemberName(SingularName(sClasses)) + sAlias + "Count";
 | 
						|
		string sBy = FKBy(FK);
 | 
						|
		string sProp = sClasses + sAlias;
 | 
						|
		string sParent = SingularName(FK.PrimaryTable.Name);
 | 
						|
		string sChild = SingularName(FK.ForeignTable.Name);
 | 
						|
		//_refreshMine += string.Format("\t\t\t{0} = null;\r\n",sMember);
 | 
						|
%>
 | 
						|
		private int <%=sCountMember%> = 0;
 | 
						|
		/// <summary>
 | 
						|
		/// Count of <%=sMember.Substring(1)%> for this <%=sParent%>
 | 
						|
		/// </summary>
 | 
						|
		public int <%=sCountMember.Substring(1)%>
 | 
						|
		{
 | 
						|
			[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
 | 
						|
			get
 | 
						|
			{
 | 
						|
				CanReadProperty("<%=sCountMember.Substring(1)%>", true);
 | 
						|
				if (<%=sCountMember%> < 0)
 | 
						|
					<%=sCountMember%> = <%=sProp%>.Count;
 | 
						|
				return <%=sCountMember%>;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		private <%=sClass%>InfoList <%=sMember%> = null;
 | 
						|
		[TypeConverter(typeof(<%=sClass%>InfoListConverter))]
 | 
						|
		public <%=sClass%>InfoList <%=sProp%>
 | 
						|
		{<%=DebugLine("20070427.5")%>
 | 
						|
			[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
 | 
						|
			get
 | 
						|
			{
 | 
						|
				CanReadProperty("<%=sProp%>", true);
 | 
						|
				if (<%=sCountMember%> < 0 || (<%=sCountMember%> > 0 && <%=sMember%> == null))
 | 
						|
					<%=sMember%> = <%=sClass%>InfoList.Get<%=sBy%>(<%=sKeys%>);
 | 
						|
				if (<%=sCountMember%> < 0)
 | 
						|
					<%=sCountMember%> = <%=sMember%>.Count;
 | 
						|
				return <%=sMember%>;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		public void Refresh<%=sProp%>()
 | 
						|
		{<%=DebugLine("20080430.3")%>
 | 
						|
			<%=sCountMember%> = -1;
 | 
						|
			ConvertListToDictionary();
 | 
						|
			if (_CacheByPrimaryKey.ContainsKey(<%=sKeys%>.ToString()))
 | 
						|
				foreach (<%=_className%> tmp in _CacheByPrimaryKey[<%=sKeys%>.ToString()])
 | 
						|
					tmp.<%=sCountMember%> = -1; // This will cause the data to be requeried
 | 
						|
		}<%
 | 
						|
	}
 | 
						|
	private void FKPropertyInfo(string sClass,string sClasses,IForeignKey FK,string sAlias)
 | 
						|
	{
 | 
						|
		string sKeys = FormatColumns("{member}",FK.PrimaryColumns,",","");
 | 
						|
		string sMember = MemberName("My" + sClass) + sAlias;
 | 
						|
		string sCountMember = MemberName(SingularName(sClasses)) + sAlias + "Count";
 | 
						|
		string sBy = FKBy(FK);
 | 
						|
		string sProp = "My" + sClass + sAlias;
 | 
						|
		//_refreshMine += string.Format("\t\t\t{0} = null;// Reset related value\r\n",sMember);
 | 
						|
		//AddRefreshMine(sMember);
 | 
						|
%>
 | 
						|
		private <%=sClass%>Info <%=sMember%> = null;
 | 
						|
		[TypeConverter(typeof(<%=sClass%>InfoConverter))]
 | 
						|
		public <%=sClass%>Info <%=sProp%>
 | 
						|
		{<%=DebugLine("20070427.6")%>
 | 
						|
			[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
 | 
						|
			get
 | 
						|
			{
 | 
						|
				CanReadProperty("<%=sProp%>", true);
 | 
						|
				if (<%=sCountMember%> != 0 && <%=sMember%> == null)
 | 
						|
				{
 | 
						|
					<%=sMember%> = <%=sClass%>Info.Get(<%=sKeys%>);
 | 
						|
					<%=sCountMember%> = <%=sMember%> == null ? 0 : 1;
 | 
						|
				}
 | 
						|
				return <%=sMember%>;
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
	}
 | 
						|
	private void vlnFactoryMethodsInfo(IColumns columns)
 | 
						|
	{
 | 
						|
		string sKeys = FormatColumns("{local}",_workingTable.PrimaryKeys,", ","");
 | 
						|
		string sKeyTypes = FormatColumns("{ctype} {local}",_workingTable.PrimaryKeys,", ","");
 | 
						|
		string sEditable = ClassName(_workingTable.Name);
 | 
						|
		string sEdMember = MemberName(sEditable);
 | 
						|
		string sEdLocal = LocalName(sEditable);
 | 
						|
		string sPKeys = FormatColumns("{member}",_workingTable.PrimaryKeys,", ","");
 | 
						|
		string sRefKeys = FormatColumns("{prop}.ToString()",_workingTable.PrimaryKeys," + \"_\" + ","");;//20070215
 | 
						|
		string sTmpKeys = FormatColumns("tmp.{prop}",_workingTable.PrimaryKeys,", ","");
 | 
						|
		string sTRefKeys = FormatColumns("tmp.{prop}.ToString()",_workingTable.PrimaryKeys," + \"_\" + ","");;//20070215
 | 
						|
%>
 | 
						|
		#region Factory Methods
 | 
						|
		private static int _<%=_className%>Unique = 0;
 | 
						|
		private static int <%=_className%>Unique
 | 
						|
		{ get { return ++_<%=_className%>Unique; } }
 | 
						|
		private int _My<%=_className%>Unique = <%=_className%>Unique;
 | 
						|
		public int My<%=_className%>Unique // Absolutely Unique ID - Info
 | 
						|
		{ get { return _My<%=_className%>Unique; } }
 | 
						|
		protected <%=_className%>()
 | 
						|
		{/* require use of factory methods */
 | 
						|
			AddToCache(this);
 | 
						|
		}
 | 
						|
		private bool _Disposed = false;
 | 
						|
		private static int _CountCreated = 0;
 | 
						|
		private static int _CountDisposed = 0;
 | 
						|
		private static int _CountFinalized = 0;
 | 
						|
		private static int IncrementCountCreated
 | 
						|
		{ get { return ++_CountCreated; } }
 | 
						|
		private int _CountWhenCreated = IncrementCountCreated;
 | 
						|
		public static int CountCreated
 | 
						|
		{ get { return _CountCreated; } }
 | 
						|
		public static int CountNotDisposed
 | 
						|
		{ get { return _CountCreated - _CountDisposed; } }
 | 
						|
		public static int CountNotFinalized
 | 
						|
		{ get { return _CountCreated - _CountFinalized; } }
 | 
						|
		~<%=_className%>()
 | 
						|
		{
 | 
						|
			_CountFinalized++;
 | 
						|
		}
 | 
						|
		public void Dispose()
 | 
						|
		{
 | 
						|
			if (_Disposed) return;
 | 
						|
			_CountDisposed++;
 | 
						|
			_Disposed = true;
 | 
						|
			RemoveFromCache(this);
 | 
						|
			if (!_CacheByPrimaryKey.ContainsKey(<%=sRefKeys%>)) return;
 | 
						|
			List<<%=_className%>> list<%=_className%> = _CacheByPrimaryKey[<%=sRefKeys%>]; // Get the list of items
 | 
						|
			while (list<%=_className%>.Contains(this)) list<%=_className%>.Remove(this); // Remove the item from the list
 | 
						|
			if (list<%=_className%>.Count == 0) // If there are no items left in the list
 | 
						|
				_CacheByPrimaryKey.Remove(<%=sRefKeys%>); // remove the list
 | 
						|
		}
 | 
						|
		public virtual <%=ClassName( _workingTable )%> Get()
 | 
						|
		{<%=DebugLine("20070502.1")%>
 | 
						|
			return _Editable = <%=sEditable%>.Get(<%=sPKeys%>);
 | 
						|
		}
 | 
						|
		public static void Refresh(<%=ClassName( _workingTable )%> tmp)
 | 
						|
		{
 | 
						|
			string key = <%=sTRefKeys%>;
 | 
						|
			ConvertListToDictionary();
 | 
						|
			if (_CacheByPrimaryKey.ContainsKey(key))
 | 
						|
				foreach (<%=_className%> tmpInfo in _CacheByPrimaryKey[key])
 | 
						|
					tmpInfo.RefreshFields(tmp);
 | 
						|
		}
 | 
						|
		protected virtual void RefreshFields(<%=ClassName( _workingTable )%> tmp)
 | 
						|
		{<%=DebugLine("20080430.1")%><%
 | 
						|
			foreach(IColumn col in Updatable(_workingTable))
 | 
						|
				UpdateInfoFromEdit(col);
 | 
						|
%>
 | 
						|
			<%=MemberName(_className)%>Extension.Refresh(this);
 | 
						|
<%=_refreshMine%>			OnChange();// raise an event
 | 
						|
		}<%
 | 
						|
		Hashtable dicAlias = new Hashtable();		// 20070216
 | 
						|
		foreach(IForeignKey fk in _workingTable.ForeignKeys)
 | 
						|
		{
 | 
						|
			if (_workingTable != fk.PrimaryTable  && !IsPrimaryKey(fk)) //20070220
 | 
						|
			{
 | 
						|
				//string sClass=ClassName(fk.PrimaryTable)+ClassName(fk.ForeignTable)+GetAlias(dicAlias,fk.PrimaryTable);
 | 
						|
				string sClass=ClassName(fk.PrimaryTable)+ClassName(fk.ForeignTable)+GetAlias(fk);
 | 
						|
				// 20070326 - Need to add an object reference
 | 
						|
				string sPrefix = "";
 | 
						|
				string sTmpKeys2 = sTmpKeys;
 | 
						|
				string sTmpKeyString = sTRefKeys;
 | 
						|
				if (ForeignPrimary(fk))
 | 
						|
				{
 | 
						|
					string sOther = ClassName(fk.PrimaryTable);
 | 
						|
					sPrefix = ClassName(fk.PrimaryTable) + " my" + ClassName(fk.PrimaryTable) + ", ";
 | 
						|
					string ssep="";
 | 
						|
					string ssepstr="";
 | 
						|
					sTmpKeys2="";
 | 
						|
					sTmpKeyString = "";				
 | 
						|
					foreach(IColumn col in _workingTable.PrimaryKeys)
 | 
						|
					{
 | 
						|
						//WriteLine("\r\n//!type = '{0}', sOther = '{1}', Col.Name = '{2}'", FormatColumn("{!type}",col), sOther, col.Name);
 | 
						|
						if (FormatColumn("{!type}",col)==sOther)
 | 
						|
						{
 | 
						|
							sTmpKeys2 += ssep + FormatColumn("{!localcolumn}",col);
 | 
						|
							sTmpKeyString += ssepstr + FormatColumn("{!localcolumn}",col) + ".ToString()";
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							sTmpKeys2 += ssep + FormatColumn("tmp.{prop}",col);
 | 
						|
							sTmpKeyString += ssepstr + FormatColumn("tmp.{prop}",col) + ".ToString()";
 | 
						|
						}
 | 
						|
						ssep=", ";
 | 
						|
						ssepstr=" + \"_\" + ";
 | 
						|
					}
 | 
						|
				}
 | 
						|
%>
 | 
						|
		public static void Refresh(<%=sPrefix%><%=sClass%> tmp)
 | 
						|
		{
 | 
						|
			string key = <%=sTmpKeyString%>;
 | 
						|
			ConvertListToDictionary();
 | 
						|
			if (_CacheByPrimaryKey.ContainsKey(key))
 | 
						|
				foreach (<%=_className%> tmpInfo in _CacheByPrimaryKey[key])
 | 
						|
					tmpInfo.RefreshFields(tmp);
 | 
						|
		}
 | 
						|
		protected virtual void RefreshFields(<%=sClass%> tmp)
 | 
						|
		{<%=DebugLine("20080430.2")%><%
 | 
						|
				foreach(IColumn col in Updatable(_workingTable))
 | 
						|
				{
 | 
						|
					if (!IsIn(col,fk.ForeignColumns))
 | 
						|
						UpdateInfoFromEdit(col);
 | 
						|
				}
 | 
						|
%>
 | 
						|
			<%=MemberName(_className)%>Extension.Refresh(this);
 | 
						|
<%=_refreshMine%>			OnChange();// raise an event
 | 
						|
		}<%
 | 
						|
			}
 | 
						|
		}
 | 
						|
%>
 | 
						|
		public static <%=_className%> Get(<%=sKeyTypes%>)
 | 
						|
		{
 | 
						|
			//if (!CanGetObject())
 | 
						|
			//  throw new System.Security.SecurityException("User not authorized to view a <%=ClassName(_workingTable)%>");
 | 
						|
			try
 | 
						|
			{
 | 
						|
				<%=_className%> tmp = GetCachedByPrimaryKey(<%=sKeys%>);
 | 
						|
				if (tmp == null)
 | 
						|
				{
 | 
						|
					tmp = DataPortal.Fetch<<%=_className%>>(new PKCriteria(<%=sKeys%>));
 | 
						|
					AddToCache(tmp);
 | 
						|
				}
 | 
						|
				if (tmp.ErrorMessage == "No Record Found")<%
 | 
						|
		if (!OneToOne(_workingTable) || true){ // RHM 20080710 - Not sure why it should not return null
 | 
						|
%>
 | 
						|
				{
 | 
						|
					tmp.Dispose(); // Clean-up <%=_className%>
 | 
						|
					tmp = null;
 | 
						|
				}<%
 | 
						|
		} else {
 | 
						|
%>
 | 
						|
				{
 | 
						|
<%=FormatColumns("tmp.{member} = {local};",_workingTable.PrimaryKeys,"\r\n","\t\t\t\t\t")%>
 | 
						|
				}<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
				return tmp;
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				throw new DbCslaException("Error on <%=_className%>.Get", ex);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	private void UpdateInfoFromEdit(IColumn col) //20080430.4
 | 
						|
	{
 | 
						|
		if (col.ForeignKeys.Count > 0)
 | 
						|
		{
 | 
						|
			string sProp=RelObjProp(col);
 | 
						|
			string sMember=MemberName(sProp);
 | 
						|
			IForeignKey FK = col.ForeignKeys[0];
 | 
						|
			//string sClass = FKClassName(FK);
 | 
						|
			string sClasses = FKClassesName(FK);
 | 
						|
			string sAlias = GetAlias(FK);
 | 
						|
			output.write(FormatColumn("\r\n\t\t\tif ({member} != tmp.{prop})",col));
 | 
						|
			output.write("\r\n\t\t\t{");
 | 
						|
			output.write("\r\n\t\t\t\tif (" + sProp + " != null) " + sProp + ".Refresh" + sClasses + sAlias + "(); // Update List for old value");
 | 
						|
			output.write(FormatColumn("\r\n\t\t\t\t{member} = tmp.{prop}; // Update the value",col));
 | 
						|
			output.write("\r\n\t\t\t}");
 | 
						|
			output.write("\r\n\t\t\t" + sMember + " = null; // Reset list so that the next line gets a new list" );
 | 
						|
			output.write("\r\n\t\t\tif (" + sProp + " != null) " + sProp + ".Refresh" + sClasses + sAlias + "(); // Update List for new value");
 | 
						|
		}
 | 
						|
		else
 | 
						|
			output.write(FormatColumn("\r\n\t\t\t{member} = tmp.{prop};",col));
 | 
						|
	}
 | 
						|
	private void vlnDataAccessPortalInfo(IColumns columns)
 | 
						|
	{
 | 
						|
%>
 | 
						|
		#region Data Access Portal
 | 
						|
		internal <%=_className%>(SafeDataReader dr)
 | 
						|
		{
 | 
						|
			<%=_databaseLogDebug%>("[{0}] <%=_className%>.Constructor", GetHashCode());
 | 
						|
			try
 | 
						|
			{
 | 
						|
				ReadData(dr);
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("<%=_className%>.Constructor", ex);
 | 
						|
				throw new DbCslaException("<%=_className%>.Constructor", ex);
 | 
						|
			}
 | 
						|
		}<%
 | 
						|
		vlnPKCriteria();
 | 
						|
		vlnReadData(columns,false);
 | 
						|
		vlnDataPortalFetch("PK",_workingTable.PrimaryKeys,ClassName(_workingTable),false);
 | 
						|
%>
 | 
						|
		#endregion<%
 | 
						|
	}
 | 
						|
	public void GeneratePropertyDescriptor()
 | 
						|
	{
 | 
						|
		_className="PropertyDescriptor";
 | 
						|
		vlnHeader("\r\nusing Csla.Validation;");
 | 
						|
		vlnListPropertyDescriptor();
 | 
						|
		vlnIVEHasBrokenRules();
 | 
						|
%>
 | 
						|
} // Namespace
 | 
						|
// The following are samples of ToString overrides<%
 | 
						|
		foreach(string sClass in _PropDescList)
 | 
						|
		{
 | 
						|
%>
 | 
						|
//	public partial class <%=sClass%>
 | 
						|
//	{ public override string ToString() { return string.Format("{0}", _Name); } }<%
 | 
						|
		}
 | 
						|
		SaveFile();
 | 
						|
	}
 | 
						|
	public void GenerateCommonRules()
 | 
						|
	{
 | 
						|
		_className="CommonRules";
 | 
						|
		vlnHeader("\r\nusing Csla.Validation;\r\nusing System.Reflection;",false);
 | 
						|
%>
 | 
						|
	public static class CommonRules
 | 
						|
	{
 | 
						|
		public static bool Required(object target, Csla.Validation.RuleArgs e)
 | 
						|
		{
 | 
						|
			PropertyInfo propertyInfoObj = target.GetType().GetProperty(e.PropertyName);
 | 
						|
			if (propertyInfoObj == null) return true;
 | 
						|
			if (propertyInfoObj.GetValue(target, null) == null)
 | 
						|
			{
 | 
						|
				e.Description = e.PropertyName + " is a required field";
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
	}
 | 
						|
}<%
 | 
						|
		SaveFile();
 | 
						|
	}
 | 
						|
	public void vlnIVEHasBrokenRules()
 | 
						|
	{
 | 
						|
%>
 | 
						|
	public interface IVEHasBrokenRules
 | 
						|
	{
 | 
						|
		IVEHasBrokenRules HasBrokenRules { get; }
 | 
						|
		BrokenRulesCollection BrokenRules { get; }
 | 
						|
	}<%
 | 
						|
	}
 | 
						|
	public void Log4Net()
 | 
						|
	{
 | 
						|
		if (_chkPartL4N)
 | 
						|
		{
 | 
						|
%>
 | 
						|
		#region Log4Net
 | 
						|
		private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | 
						|
		#endregion<%
 | 
						|
		}
 | 
						|
	}
 | 
						|
	public void GenerateDatabase()
 | 
						|
	{
 | 
						|
		_className="Database";
 | 
						|
		vlnHeader("\r\nusing System.Diagnostics;");
 | 
						|
%>
 | 
						|
	public static partial class Database
 | 
						|
	{<%
 | 
						|
		if (_chkPartL4N)
 | 
						|
		{
 | 
						|
%>
 | 
						|
		#region Log4Net
 | 
						|
		private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | 
						|
		#endregion<%
 | 
						|
		}
 | 
						|
%>
 | 
						|
		public static void LogException(string s, Exception ex)
 | 
						|
		{
 | 
						|
			int i = 0;
 | 
						|
			Console.WriteLine("Error - {0}", s);
 | 
						|
			for (; ex != null; ex = ex.InnerException)
 | 
						|
			{
 | 
						|
				Console.WriteLine("{0}{1} - {2}", "".PadLeft(++i * 2), ex.GetType().ToString(), ex.Message);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		private static bool _LoggingInfo = false; // By default don't log info 
 | 
						|
		public static bool LoggingInfo
 | 
						|
		{
 | 
						|
			get { return _LoggingInfo; }
 | 
						|
			set { _LoggingInfo = value; }
 | 
						|
		}
 | 
						|
		static System.Diagnostics.Process _CurrentProcess = System.Diagnostics.Process.GetCurrentProcess();
 | 
						|
		public static void LogInfo(string s, int hashCode)
 | 
						|
		{
 | 
						|
			if (_LoggingInfo)
 | 
						|
				Console.WriteLine("{0} MB {1}", _CurrentProcess.WorkingSet64 / 1000000, string.Format(s, hashCode));
 | 
						|
		}
 | 
						|
		public static void LogDebug(string s, int hashCode)
 | 
						|
		{
 | 
						|
			if (_LoggingInfo)
 | 
						|
				Console.WriteLine("{0} MB {1}", _CurrentProcess.WorkingSet64 / 1000000, string.Format(s, hashCode));
 | 
						|
		}
 | 
						|
		private static string _ConnectionName = "<%=_dbConnection%>";
 | 
						|
		public static string ConnectionName
 | 
						|
		{
 | 
						|
			get { return Database._ConnectionName; }
 | 
						|
			set { Database._ConnectionName = value; }
 | 
						|
		}
 | 
						|
		public static string <%=_dbConnection%>_Connection
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				DateTime.Today.ToLongDateString();
 | 
						|
				ConnectionStringSettings cs = ConfigurationManager.ConnectionStrings[ConnectionName];
 | 
						|
				if (cs == null)
 | 
						|
				{
 | 
						|
					throw new ApplicationException("Database.cs Could not find connection " + ConnectionName);
 | 
						|
				}
 | 
						|
				return cs.ConnectionString;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		public static SqlConnection <%=_dbConnection%>_SqlConnection
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				string strConn = <%=_dbConnection%>_Connection; // If failure - Fail (Don't try to catch)
 | 
						|
				// Attempt to make a connection 
 | 
						|
				try
 | 
						|
				{
 | 
						|
					SqlConnection cn = new SqlConnection(strConn);
 | 
						|
					cn.Open();
 | 
						|
					return cn;
 | 
						|
				}
 | 
						|
				catch (SqlException exsql)
 | 
						|
				{
 | 
						|
					const string strAttachError = "An attempt to attach an auto-named database for file ";
 | 
						|
					if (exsql.Message.StartsWith(strAttachError))
 | 
						|
					{// Check to see if the file is missing
 | 
						|
						string sFile = exsql.Message.Substring(strAttachError.Length);
 | 
						|
						sFile = sFile.Substring(0, sFile.IndexOf(" failed"));
 | 
						|
						//	"An attempt to attach an auto-named database for file <mdf file> failed"
 | 
						|
						if (strConn.ToLower().IndexOf("user instance=true") < 0)
 | 
						|
						{
 | 
						|
							throw new ApplicationException("Connection String missing attribute: User Instance=True");
 | 
						|
						}
 | 
						|
						if (System.IO.File.Exists(sFile))
 | 
						|
						{
 | 
						|
							throw new ApplicationException("Database file " + sFile + " Cannot be opened\r\n", exsql);
 | 
						|
						}
 | 
						|
						else
 | 
						|
						{
 | 
						|
							throw new FileNotFoundException("Database file " + sFile + " Not Found", exsql);
 | 
						|
						}
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						throw new ApplicationException("Failure on Connect", exsql);
 | 
						|
					}
 | 
						|
				}
 | 
						|
				catch (Exception ex)// Throw Application Exception on Failure
 | 
						|
				{
 | 
						|
					<%=_databaseLogError%>("Connection Error", ex);
 | 
						|
					throw new ApplicationException("Failure on Connect", ex);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		public static void PurgeData()
 | 
						|
		{
 | 
						|
			try
 | 
						|
			{
 | 
						|
				SqlConnection cn = <%=_dbConnection%>_SqlConnection;
 | 
						|
				SqlCommand cmd = new SqlCommand("purgedata", cn);
 | 
						|
				cmd.CommandType = CommandType.StoredProcedure;
 | 
						|
				cmd.CommandTimeout = 0;
 | 
						|
				cmd.ExecuteNonQuery();
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				<%=_databaseLogError%>("Purge Error", ex);
 | 
						|
				throw new ApplicationException("Failure on Purge", ex);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	public class DbCslaException : Exception
 | 
						|
	{
 | 
						|
		internal DbCslaException(string message, Exception innerException) : base(message, innerException) { ;}
 | 
						|
		internal DbCslaException(string message) : base(message) { ;}
 | 
						|
		internal DbCslaException() : base() { ;}
 | 
						|
	} // Class
 | 
						|
} // Namespace
 | 
						|
<%
 | 
						|
	SaveFile();
 | 
						|
	}
 | 
						|
%><%#FILE NamingConvention.cs%><%
 | 
						|
%><%#FILE ForeignKeyProcessing.cs%><%
 | 
						|
%><%#FILE WriteLine.cs%><%
 | 
						|
%><%#FILE FilteredColumns.cs%><%
 | 
						|
%><%#FILE FormatColumns.cs%><%
 | 
						|
}// Bottom of Namespace
 | 
						|
%>
 | 
						|
##|BODY_END
 |