使用LINQ to SQL查询数据库模式

时间:2013-09-03 10:14:50

标签: c# linq linq-to-sql

我正在尝试编写一个应用程序,我可以指向不同的数据库并查看数据库的模式,即表及其列的属性,关系,约束等。我一直在研究{{3方法GetTable(),但这似乎什么都不返回;

public static IEnumerable<MetaTable> GetMetaTables()
{
    using (var connection = new SqlConnection(ConnectionString))
    using (var context = new SchemaDataContext(connection))
           return context.Mapping.GetTables().ToList();
}

我做错了什么!?

3 个答案:

答案 0 :(得分:2)

    var model = new AttributeMappingSource().GetModel(typeof({YourDataContext})); return model.GetTables().ToList();


编辑到我原来​​的解决方案:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    DataTable table = connection.GetSchema("Tables");

    // displaying data:
    foreach (System.Data.DataRow row in table.Rows)
    {
        foreach (System.Data.DataColumn col in table.Columns)
        {
           Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
        }
}

答案 1 :(得分:0)

问题在于您没有实体SchemaDataContext,因此根本没有映射。但是如果你在SchemaDataContext中没有实体,那么你真的不应该使用ORM。

这是一个更简单的解决方案,没有Linq to SQL:

public static IEnumerable<string> GetTables()
{
    using (var connection = new SqlConnection(ConnectionString))
    {
        connection.Open();
        foreach (var table in connection.GetSchema("Tables").Rows)
        {
            yield return (string)table[2];
        }
    }
}

答案 2 :(得分:0)

我找到了另一个问题的答复,这个问题也完美地回答了我的问题!

Accessing System Databases/Tables using LINQ to SQL?