C# 用LINQ到SQL查询数据库模式
我试图编写一个应用程序,我可以指向不同的数据库,查看数据库的模式,即表及其列的属性、关系、约束等。我一直在研究GetTable()方法,但这似乎没有返回任何结果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
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中创建了实体吗?没有!我想这就是问题所在,我需要一种查询所有表的方法,而不考虑实体。如果您已经有数据上下文的实例,则可以从映射
属性访问元模型,所以这个解决方案也不起作用。它对我起了作用,我也更新了解决方案,因为让代码过于复杂是没有意义的。这可能已经足够了,尽管我希望将结果映射到一个对象,这样我就不必通过索引访问凌乱数据表中的结果了!最新消息:这不会减少芥末。似乎没有办法用这种技术适当地询问外键约束。(您可以看到什么表上有什么约束,但这是最基本的约束)。