Last active
January 15, 2024 03:54
-
-
Save jamesmanning/4391786 to your computer and use it in GitHub Desktop.
Revisions
-
jamesmanning renamed this gist
Dec 27, 2012 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
jamesmanning renamed this gist
Dec 27, 2012 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
jamesmanning created this gist
Dec 27, 2012 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,85 @@ void Main() { var databaseInfo = GetDatabaseInfo(this); databaseInfo.Dump(); } // Define other methods and classes here public class DatabaseInfo { public Type DataContextType { get; set; } public string DatabaseName { get; set; } public string DatabaseServer { get; set; } public TableInfo[] Tables { get; set; } } public class TableInfo { public Type TableType { get; set; } public Type EntityType { get; set; } public string TableName { get; set; } public ColumnInfo[] Columns { get; set; } } public class ColumnInfo { public string ColumnName { get; set; } public string DatabaseType { get; set; } } public DatabaseInfo GetDatabaseInfo(LINQPad.DataContextBase dataContext) { return new DatabaseInfo { DatabaseName = dataContext.Connection.Database, DatabaseServer = dataContext.Connection.DataSource, DataContextType = dataContext.GetType(), Tables = GetTables(dataContext.GetType()), }; } public TableInfo[] GetTables(Type dataContextType) { var tableInfoQuery = from prop in dataContextType.GetProperties() where prop.PropertyType.IsGenericType where prop.PropertyType.GetGenericTypeDefinition() == typeof(Table<>) let tableType = prop.PropertyType let entityType = tableType.GenericTypeArguments.Single() select new TableInfo { TableName = GetTableNameFromEntityType(entityType), EntityType = entityType, TableType = tableType, Columns = GetColumnsFromEntityType(entityType), }; return tableInfoQuery.ToArray(); } public string GetTableNameFromEntityType(Type entityType) { var tableNameQuery = from ca in entityType.CustomAttributes from na in ca.NamedArguments where na.MemberName == "Name" select na.TypedValue.Value.ToString(); return tableNameQuery.Single(); } public ColumnInfo[] GetColumnsFromEntityType(Type entityType) { var columnInfoQuery = from field in entityType.GetFields() from attribute in field.CustomAttributes from namedArgument in attribute.NamedArguments where namedArgument.MemberName == "DbType" select new ColumnInfo { ColumnName = field.Name, DatabaseType = namedArgument.TypedValue.Value.ToString(), }; return columnInfoQuery.ToArray(); }