<%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="CodeSmith.CustomProperties"%>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="" %>
<%@ Property Name="NameSpace" Type="String" Category="Context" Description="" %>

<script runat="template">
public string GetMemberAndAtt(ColumnSchema column)
{
string Mem="private ";
string Att="public ";

if(((bool)column.ExtendedProperties["CS_IsIdentity"].Value)!=true&&column.Name.EndsWith("Id"))
{
Mem+=column.Name.Substring(0,column.Name.Length-2)+" _"+column.Name.Substring(0,column.Name.Length-2)+";\n\n";
Att+=column.Name.Substring(0,column.Name.Length-2)+" "+column.Name.Substring(0,column.Name.Length-2)+"\n{\n\t";
Att+="get\n\t{\t\treturn "+"_"+column.Name.Substring(0,column.Name.IndexOf("Id"))+";\n\t}\n";
Att+="\tset\n\t{\t\t_"+column.Name.Substring(0,column.Name.Length-2)+"=value;\n\t}\n";
Att+="}\n\n";
}
else
{
string type=GetType(column);
Mem+=type+" _"+column.Name+";\n\n";
Att+=type+" "+column.Name+"\n{\n\t";
Att+="get\n\t{\t\treturn "+"_"+column.Name+";\n\t}\n";
Att+="\tset\n\t{\t\t_"+column.Name+"=value;\n\t}\n";
Att+="}\n\n";
}
return Mem+Att;
}
public string GetType(ColumnSchema column)
{
switch (column.DataType){
               case DbType.AnsiString: return "string";
               case DbType.AnsiStringFixedLength: return "string";
               case DbType.Binary: return "byte[]";
               case DbType.Boolean: return "bool";
               case DbType.Byte: return "int";
               case DbType.Currency: return "decimal";
               case DbType.Date: return "DateTime";
               case DbType.DateTime: return "DateTime";
               case DbType.Decimal: return "decimal";
               case DbType.Double: return "double";
               case DbType.Guid: return "Guid";
               case DbType.Int16: return "short";
               case DbType.Int32: return "int";
               case DbType.Int64: return "long";
               case DbType.Object: return "object";
               case DbType.SByte: return "sbyte";
               case DbType.Single: return "float";
               case DbType.String: return "string";
               case DbType.StringFixedLength: return "string";
               case DbType.Time: return "DateTime";
               case DbType.UInt16: return "ushort";
               case DbType.UInt32: return "uint";
               case DbType.UInt64: return "ulong";
               case DbType.VarNumeric: return "decimal";
   }
   return "";
}
</script>

// Description: Enter summary here after generation.
// ---------------------
// Copyright . <%= DateTime.Now.Year %> Our Client
// ---------------------
// History
// <%= DateTime.Now.ToString() %>

using System;
using System.Collections;

namespace <%=NameSpace %>
{
#region region Entity
public class <%= SourceTable.Name %>
{
 public <%= SourceTable.Name %>()
 {
 }
 <% for (int i = 0; i < SourceTable.Columns.Count; i++) { %>
 <%= GetMemberAndAtt(SourceTable.Columns[i]) %>
 <% } %>
}
#endregion

#region EntityCollection
public class <%= SourceTable.Name %>Collection:CollectionBase
{
 public <%= SourceTable.Name %> this[int index]
 {
  get {return (<%= SourceTable.Name %>)List[index];}
  set {List[index] = value;}
 }

 public int Add(<%= SourceTable.Name %> value)
 {
  return (List.Add(value));
 }

 public int IndexOf(<%= SourceTable.Name %> value)
 {
  return (List.IndexOf(value));
 }

 public void Insert(int index, <%= SourceTable.Name %> value)
 {
  List.Insert(index, value);
 }

 public void Remove(<%= SourceTable.Name %> value)
 {
  List.Remove(value);
 }

 public bool Contains(<%= SourceTable.Name %> value)
 {
  return (List.Contains(value));
 }
}
#endregion
}