nHydrate.Generator.SqlSchemaToModel.GetTableDefinitionFromDatabase C# (CSharp) Method

GetTableDefinitionFromDatabase() public static method

public static GetTableDefinitionFromDatabase ( string connectionString, string tableName, ModelRoot root ) : IEnumerable
connectionString string
tableName string
root nHydrate.Generator.Models.ModelRoot
return IEnumerable
		public static IEnumerable<Column> GetTableDefinitionFromDatabase(string connectionString, string tableName, ModelRoot root)
		{
			try
			{
				var retval = new List<Column>();

				//Columns
				var connection = DatabaseHelper.GetConnection(connectionString);
				var columnReader = (SqlDataReader)DatabaseHelper.ExecuteReader(connectionString, CommandType.Text, GetSqlColumnsForTable(tableName));
				while (columnReader.Read())
				{
					var columnName = columnReader["columnName"].ToString();
					if (StringHelper.Match(columnName, root.Database.CreatedByColumnName) || StringHelper.Match(columnName, root.Database.CreatedDateColumnName))
					{
						//Do Nothing
					}
					else if (StringHelper.Match(columnName, root.Database.ModifiedByColumnName) || StringHelper.Match(columnName, root.Database.ModifiedDateColumnName) ||
						StringHelper.Match(columnName, "updated_by") || StringHelper.Match(columnName, "updated_date"))
					{
						//Do Nothing
					}
					else if (StringHelper.Match(columnName, root.Database.TimestampColumnName))
					{
						//Do Nothing
					}
					else
					{
						var currentColumn = new Column(root);
						currentColumn.Name = columnName;

						if (!ValidationHelper.ValidDatabaseIdenitifer(currentColumn.Name))
						{
							currentColumn.CodeFacade = ValidationHelper.MakeDatabaseIdentifier(currentColumn.Name);
						}

						//currentColumn.ParentTableRef = currentTable.CreateRef();
						currentColumn.AllowNull = bool.Parse(columnReader["allowNull"].ToString());
						if (bool.Parse(columnReader["isIdentity"].ToString()))
							currentColumn.Identity = IdentityTypeConstants.Database;
						else
							currentColumn.Identity = IdentityTypeConstants.None;

						if (columnReader["isPrimaryKey"] != System.DBNull.Value)
							currentColumn.PrimaryKey = true;

						//currentColumn.PrimaryKey = bool.Parse(columnReader["isPrimaryKey"].ToString());
						try
						{
							//string columnTypename = columnReader["datatype"].ToString();
							//if (StringHelper.Match(columnTypename, "numeric", true))
							//  currentColumn.DataType = SqlDbType.Decimal;
							//else
							//  currentColumn.DataType = (SqlDbType)Enum.Parse(typeof(SqlDbType), columnTypename, true);
							currentColumn.DataType = DatabaseHelper.GetSQLDataType((SqlNativeTypes)int.Parse(columnReader["xtype"].ToString()));
						}
						catch { }

						var defaultvalue = columnReader["defaultValue"].ToString();
						SetupDefault(currentColumn, defaultvalue);

						currentColumn.Length = (int)columnReader["length"];

						if (CanUseExtendedProperty(connectionString))
						{
							var columnAttributeReader = (SqlDataReader)DatabaseHelper.ExecuteReader(connection, CommandType.Text, "SELECT name, value FROM  ::fn_listextendedproperty (default,'user', 'dbo', 'table', '" + tableName + "', 'column', '" + currentColumn + "')");
							while (columnAttributeReader.Read())
							{
								var attribName = string.Empty;
								attribName = columnAttributeReader["name"].ToString();
								if (attribName.ToLower().Equals("ms_description"))
								{
									currentColumn.Description = columnAttributeReader["value"].ToString();
								}

							}
							columnAttributeReader.Close();
						}

						retval.Add(currentColumn);
					} //Create New Column
				}
				columnReader.Close();
				return retval;

			}
			catch (Exception ex)
			{
				throw;
			}
		}