⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nhibernate updated by gustavo.zeus

📁 mygeneration 自动生成影射文件
💻 ZEUS
📖 第 1 页 / 共 2 页
字号:
	}
	
	private void BuildInternalAccessors( IColumns Columns )
	{
		if( Columns.Count > 0 )
		{
		%>#region Internal Accessors for NHibernate
		<%
			foreach( IColumn field in Columns )
			{
				string fieldAccessor = ColumnToNHibernateProperty( field );
				string fieldName = ColumnToMemberVariable( field );
			%>
		#region <%= fieldAccessor %>
		/// <summary>
		/// <%= field.Description %>
		/// </summary>
		internal <%= ColumnToNHibernateType( field ) %> <%= fieldAccessor %>
		{
			get { return <%= fieldName %>; }
			set { <%= fieldName %> = value; }
		}
		#endregion
		<%
			}
%>
		#endregion // Internal Accessors for NHibernate <%
		}
	}
	
	private void BuildPublicAccessors( IColumns Columns )
	{
		if( Columns.Count > 0 )
		{
			%>#region Public Properties
			<%
			
			foreach( IColumn field in Columns )
			{
				string fieldAccessor = ColumnToPropertyName( field );
				string fieldName = ColumnToMemberVariable( field );
				string fieldType = ( field.IsInForeignKey && !field.IsInPrimaryKey ? ToPascalCase( field.ForeignKeys[0].PrimaryTable.Alias.Replace( " ", "" ) ) : ColumnToNHibernateType( field ) );
			%>
		/// <summary>
		/// <%= field.Description %>
		/// </summary>		
		public <%= fieldType %> <%= fieldAccessor %>
		{
			get { return <%= fieldName %>; }<%
				if( !_createReadOnly )
				{
					//if(!((field.IsInPrimaryKey && field.IsAutoKey) || field.IsComputed))
					//{
						switch( fieldType )
						{
							default:%>
			set { <%= _prefix %>isChanged = (<%= fieldName %> != value); <%= fieldName %> = value; }<%						
								break;
							case "byte": %>
			set	
			{
				//if( value.Length > <%= field.CharacterMaxLength.ToString() %>)
					//throw new ArgumentOutOfRangeException("<%= field.Description %>无效!", value, value.ToString());
				
				<%= _prefix %>isChanged = (<%= fieldName %> != value); 
				<%= fieldName %> = value;
			}
<%
								break;
							case "string": %>
			set	
			{
				if( value.Length > <%= field.CharacterMaxLength.ToString() %>)
					throw new ArgumentOutOfRangeException("<%= field.Description %>无效!", value, value.ToString());
				
				<%= _prefix %>isChanged = (<%= fieldName %> != value); 
				<%= fieldName %> = value;
			}<%						
								break;
					}
				//}
			}%>
		}
			<%
			}
			
			%>
		/// <summary>
		/// Returns whether or not the object has changed it's values.
		/// </summary>
		public bool IsChanged
		{
			get { return <%= _prefix %>isChanged; }
		}
		
		/// <summary>
		/// Returns whether or not the object has changed it's values.
		/// </summary>
		public bool IsDeleted
		{
			get { return <%= _prefix %>isDeleted; }
		}
		
		#endregion <%
		}
	}
	
	private void BuildPublicFunctions( IColumns Columns )
	{%>
		#region Public Functions
		
		/// <summary>
		/// mark the item as deleted
		/// </summary>
		public void MarkAsDeleted()
		{
			<%= _prefix %>isDeleted = true;
			<%= _prefix %>isChanged = true;
		}
		
		#endregion<%
	}
	
	private void BuildHBMDefinition( IColumns Columns )
	{
		if( Columns.Count > 0 )
		{
			output.writeln( "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" );
			output.writeln( NHibernateMappingTag() );
			output.writeln( "\t" + NHibernateClassTag( Columns ) );
			output.writeln( "\t\t" + NHibernatePrimaryKeysTag( Columns ) );
			output.writeln( "\t\t" + NHibernateProperties( Columns ) );
			output.writeln( "\t</class>" );
			output.writeln( "</hibernate-mapping>" );
		}
	}
	
	private string NHibernateMappingTag()
	{
		//// can't handle external mappings ?!?
		////string xml = "<hibernate-mapping xmlns=\"http://nhibernate.sourceforge.net/schemas/nhibernate-mapping-2.0.xsd\"";
		//string xml = "<hibernate-mapping xmlns=\"urn:nhibernate-mapping-2.0\"";
		//// handle schemas, cascade, import, and access methods?
		//return xml + ">";
		return "<hibernate-mapping xmlns=\"urn:nhibernate-mapping-2.0\">";
	}
	
	private string NHibernateClassTag( IColumns Columns )
	{
		//ITable t = Columns[0].Table;
		//IView v = Columns[0].View;
		//string desc = ( t == null ) ? v.Description : t.Description;
		StringBuilder xml = new StringBuilder();
		xml.Append( "<class name=\"" ).Append( _nameSpace ).Append( "." ).Append( _className ).Append( "," ).Append( _nameSpace ).Append( "\"" );
		xml.Append( " table=\"" ).Append( _tableName ).Append( "\"" );
		if( _createReadOnly )
		{
			xml.Append( " mutable=\"false\"" );
		}
		// handle schema override, dynamic insert & update, and proxies?
		xml.Append( ">\r\n" );
		return xml.ToString();
	}
	
	private string NHibernatePrimaryKeysTag( IColumns Columns )
	{
		StringBuilder xml = new StringBuilder();
		int i = 0;
		foreach( IColumn c in Columns )
		{
			if( c.IsInPrimaryKey )
			{
				i++;
			}
		}
		if( i == 0 )
		{
			return "<!-- could not find a primary key for this table/view. NHibernate requires an 'id' element, so you'll have to define one manually. -->";
		}
		if( i == 1 )
		{
			foreach( IColumn c in Columns )
			{
				if( c.IsInPrimaryKey )
				{
					xml.Append( "<id name=\"" ).Append( ColumnToPropertyName( c ) ).Append( "\" column=\"" );
					xml.Append( c.Alias ).Append( "\" type=\"" ).Append( ConvertNHibernate( ColumnToNHibernateType( c ) ) ).Append( "\"" );
					switch( ColumnToNHibernateType( c ) )
					{
						case "decimal":
						case "float":
						case "short":
						case "int":
						case "long":
							xml.Append( " unsaved-value=\"0\">\r\n" );
							break;
						default:
							xml.Append( ">\r\n" );
							break;
					}
					xml.Append( "\t\t\t<generator class=\"" );
					xml.Append( ( c.IsAutoKey ) ?  "native" : "assigned" );
					xml.Append( "\"/>\r\n\t\t</id>" );
				}
			}
		}
		if( i > 1 )
		{
			xml.Append( "<composite-id access=\"field\">" );
			xml.Append( "\r\n\t\t\t" );
			foreach( IColumn c in Columns )
			{
				if( c.IsInPrimaryKey )
				{
					xml.Append(" <key-property name=\"").Append( ColumnToPropertyName( c ) ).Append( "\" column=\"" );
					xml.Append( c.Alias ).Append( "\" type=\"" ).Append( ConvertNHibernate( ColumnToNHibernateType( c ) ) ).Append( "\"" );
					switch( ColumnToNHibernateType( c ) )
					{
						case "decimal":
						case "float":
						case "short":
						case "int":
						case "long":
							xml.Append( " />\r\n" );
							break;
						default:
							xml.Append( "/>\r\n" );
							break;
					}
					xml.Append( "\t\t\t" );
					
				}
			}
			xml.Append( "\r\n\t\t</composite-id>\r\n\t\t" );
			xml.Append( "<!-- Eu fucei! composite primary key support is touchy. View the documentation for syntax. -->" );
		}
		return xml.ToString();
	}
	
	private string NHibernateProperties( IColumns Columns )
	{
		StringBuilder xml = new StringBuilder();
		foreach( IColumn c in Columns )
		{
			if( !c.IsInPrimaryKey )
			{
				// create sets & such for foreign keys !!!
				if( c.IsInForeignKey )
				{
					if( c.ForeignKeys.Count > 1 )
					{
						xml.Append( "<!-- more than one foreign column is mapped to " ).Append( c.Name ).Append( " - you're on your own. -->\r\n\t\t" );
					}
					else
					{
						IForeignKey fk = c.ForeignKeys[0];
						xml.Append( "<many-to-one name=\"" ).Append( ColumnToPropertyName( c ) ).Append( "\" column=\"" ).Append( c.Name );
						xml.Append( "\" class=\"" ).Append( _nameSpace ).Append( "." ).Append( ToPascalCase( fk.PrimaryTable.Alias.Replace( " ", "" ) ) ).Append( "," ).Append( _nameSpace ).Append( "\" />\r\n\t\t" );
					}
				}
				else
				{
					xml.Append( "<property column=\"" ).Append( c.Name );
					xml.Append( "\" type=\"" ).Append( ConvertNHibernate( ColumnToNHibernateType( c ) ) ).Append( "\"" );
					if( _createReadOnly )
					{
						xml.Append( " access=\"field\" name=\"" ).Append( ColumnToMemberVariable( c ) ).Append( "\"" );
					}
					else
					{
						 xml.Append( " name=\"" ).Append( ColumnToPropertyName( c ) ).Append( "\"" );
					}
					if( !c.IsNullable )
					{
						xml.Append( " not-null=\"true\"" );
					}
					if( c.LanguageType == "string" )
					{
						xml.Append( " length=\"" ).Append( c.CharacterMaxLength ).Append( "\"" );
					}
					xml.Append( " />\r\n\t\t" );
				}
			}
		}
		return xml.ToString();
	}
	
	private string ConvertNHibernate( string Type )
	{
		string retVal = Type;
		
		switch( Type )
		{
			case "bool":
				retVal = "Boolean";
				break;
			case "byte":
				retVal = "Byte";
				break;
			case "sbyte":
				retVal = "SByte";
				break;
			case "char":
				retVal = "Char";
				break;
			case "decimal":
				retVal = "Decimal";
				break;
			case "double":
				retVal = "Double";
				break;
			case "float":
				retVal = "Single";
				break;
			case "int":
				retVal = "Int32";
				break;
			case "uint":
				retVal = "UInt32";
				break;
			case "long":
				retVal = "Int64";
				break;
			case "ulong":
				retVal = "UInt64";
				break;
			case "short":
				retVal = "Int16";
				break;
			case "ushort":
				retVal = "UInt16";
				break;
			case "string":
				retVal = "String";
				break;
		}
		
		return retVal;
	}
	
	private string ColumnToMemberVariable( IColumn Column )
	{
		return _prefix + UniqueColumn( Column ).ToLower();
	}
	
	private string ColumnToPropertyName( IColumn Column )
	{
		return ToPascalCase( UniqueColumn( Column ) );
	}
	
	private string ColumnToArgumentName( IColumn Column )
	{
		return UniqueColumn( Column ).ToLower();
	}
	
	private string ColumnToNHibernateProperty( IColumn Column )
	{
		return _prefix + UniqueColumn( Column );
	}
	
	private string UniqueColumn( IColumn Column )
	{
		string c = Column.Alias.Replace( " ", "" );
		if( Column.Table != null && Column.Table.Alias.Replace( " ", "" ) == c )
		{
			c += "Name";
		}
		if( Column.View != null && Column.View.Alias.Replace( " ", "" )  == c )
		{
			c += "Name";
		}
		return c;
	}
	
	// nhibernate doesn't have these, so use the existing types
	private string ColumnToNHibernateType( IColumn Column )
	{
		string retVal = Column.LanguageType;
		
		switch( Column.LanguageType )
		{
			case "sbyte":
				retVal = "byte";
				break;
			case "uint":
				retVal = "int";
				break;
			case "ulong":
				retVal = "long";
				break;
			case "ushort":
				retVal = "short";
				break;
		}
		
		return retVal;
	}
	
	private string ToLeadingCaps( string name )
	{
		char[] chars = name.ToLower().ToCharArray();
		chars[0] = Char.ToUpper( chars[0] );
		return new string( chars );
	}
	
	private string ToLeadingLower( string name )
	{
		char[] chars = name.ToCharArray();
		chars[0] = Char.ToLower( chars[0] );
		return new string( chars );
	}
	
	private string ToPascalCase( string name )
	{
		string notStartingAlpha = Regex.Replace( name, "^[^a-zA-Z]+", "" );
		string workingString = ToLowerExceptCamelCase( notStartingAlpha );
		workingString = RemoveSeparatorAndCapNext( workingString );
		return workingString;
	}
	
	private string RemoveSeparatorAndCapNext( string input )
	{
		string dashUnderscore = "-_";
		string workingString = input;
		char[] chars = workingString.ToCharArray();
		int under = workingString.IndexOfAny( dashUnderscore.ToCharArray() );
		while( under > -1 )
		{
			chars[ under + 1 ] = Char.ToUpper( chars[ under + 1 ], CultureInfo.InvariantCulture );
			workingString = new String( chars );
			under = workingString.IndexOfAny( dashUnderscore.ToCharArray(), under + 1 );
		}
		chars[ 0 ] = Char.ToUpper( chars[ 0 ], CultureInfo.InvariantCulture );
		workingString = new string( chars );
		return Regex.Replace( workingString, "[-_]", "" );
	}

	private string ToLowerExceptCamelCase( string input )
	{
		char[] chars = input.ToCharArray();
		for( int i = 0; i < chars.Length; i++ )
		{
			int left = ( i > 0 ? i - 1 : i );
			int right = ( i < chars.Length - 1 ? i + 1 : i );
			if( i != left && i != right )
			{
				if( Char.IsUpper( chars[i] ) && Char.IsLetter( chars[ left ] ) && Char.IsUpper( chars[ left ] ) )
				{
					chars[i] = Char.ToLower( chars[i], CultureInfo.InvariantCulture );
				}
				else if( Char.IsUpper( chars[i] ) && Char.IsLetter( chars[ right ] ) && Char.IsUpper( chars[ right ] ) )
				{
					chars[i] = Char.ToLower( chars[i], CultureInfo.InvariantCulture );
				}
				else if( Char.IsUpper( chars[i] ) && !Char.IsLetter( chars[ right ] ) )
				{
					chars[i] = Char.ToLower( chars[i], CultureInfo.InvariantCulture );
				}
			}
		}
		chars[ chars.Length - 1 ] = Char.ToLower( chars[ chars.Length - 1 ], CultureInfo.InvariantCulture );
		return new string( chars );
	}
	
	private int CountRequiredFields( IColumns Columns )
	{
		return Columns.Count - CountNullableFields( Columns );
	}
	
	private int CountNullableFields( IColumns Columns )
	{
		int i = 0;
		foreach( IColumn c in Columns )
		{
			if( c.IsNullable )
			{
				i++;
			}
		}
		return i;
	}
	
	private int CountUniqueFields( IColumns Columns )
	{
		int i = 0;
		foreach( IColumn c in Columns )
		{
			if( !c.IsNullable && c.IsInPrimaryKey )
			{
				i++;
			}
		}
		return i;
	}
}
%>
##|BODY_END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -