C# 用LINQ到SQL查询数据库模式

C# 用LINQ到SQL查询数据库模式,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我试图编写一个应用程序,我可以指向不同的数据库,查看数据库的模式,即表及其列的属性、关系、约束等。我一直在研究GetTable()方法,但这似乎没有返回任何结果 public static IEnumerable<MetaTable> GetMetaTables() { using (var connection = new SqlConnection(ConnectionString)) using (var context = new SchemaDataCont

我试图编写一个应用程序,我可以指向不同的数据库,查看数据库的模式,即表及其列的属性、关系、约束等。我一直在研究GetTable()方法,但这似乎没有返回任何结果

public static IEnumerable<MetaTable> GetMetaTables()
{
    using (var connection = new SqlConnection(ConnectionString))
    using (var context = new SchemaDataContext(connection))
           return context.Mapping.GetTables().ToList();
}
公共静态IEnumerable GetMetaTables()
{
使用(var连接=新的SqlConnection(ConnectionString))
使用(var context=newschemaDataContext(连接))
返回context.Mapping.GetTables().ToList();
}

我做错了什么

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

下面是一个更简单的解决方案,没有Linq到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];
        }
    }
}
公共静态IEnumerable GetTables()
{
使用(var连接=新的SqlConnection(ConnectionString))
{
connection.Open();
foreach(connection.GetSchema(“Tables”).Rows中的var表)
{
收益率返回(字符串)表[2];
}
}
}
var model=newattributemappingsource().GetModel(typeof({YourDataContext}));
返回模型.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]);
        }
}

你真的在SchemaDataContext中创建了实体吗?没有!我想这就是问题所在,我需要一种查询所有表的方法,而不考虑实体。如果您已经有数据上下文的实例,则可以从
映射
属性访问元模型,所以这个解决方案也不起作用。它对我起了作用,我也更新了解决方案,因为让代码过于复杂是没有意义的。这可能已经足够了,尽管我希望将结果映射到一个对象,这样我就不必通过索引访问凌乱数据表中的结果了!最新消息:这不会减少芥末。似乎没有办法用这种技术适当地询问外键约束。(您可以看到什么表上有什么约束,但这是最基本的约束)。