【问题标题】:How to Iterate through Tables in a DataContext and Test-Read Records?如何遍历 DataContext 中的表和测试读取记录?
【发布时间】:2012-12-27 17:27:14
【问题描述】:

我正在尝试创建一个TestMethod,它将枚举我的数据上下文中的表并尝试从每个表中读取一条记录。测试的目标是确保我的 .dbml 文件与底层数据库同步。到目前为止我所拥有的:

[TestMethod]
public void TestDataContextTables()
{
    using ( MyDataContext dataContext = new MyDataContext() )
    {
        int count = 0;
        IEnumerable<MetaTable> tableList = dataContext.Mapping.GetTables();

        foreach ( MetaTable table in tableList )
        {
            Debug.Print( "Testing " + table.TableName + "..." );

            // method to restore >= 1 record using LINQ...
            //Object dummy = from t in dataContext.Mapping.GetTables().Skip( count ).Take( 1 ) select t;  <-- wrong (1)
            //Object dummy = from t in dataContext.Mapping.GetTable( table.RowType.GetType() ) select t; <-- also wrong (2)
            //Object dummy = from t in dataContext.Mapping.GetTable( table.RowType.GetType() ).GetType() select t; <-- also wrong (3)

            Debug.Print( "OK\n" );
            count++;
        }
    }
}

LINQ 语句 (1) 似乎没有读取任何实际数据。 LINQ 语句 (2) 给出了编译时错误“找不到源类型 'MetaTable' 的查询模式的实现”,并且 (3) 给出了错误“找不到源类型的查询模式的实现” '系统类型'”。后两者告诉我,当我应该指的是 something 时,我指的是元 something

我正在寻找的是一种在 LINQ 语句中引用 DataContext 中的每个表并从每条记录中返回一行以确保 LINQ 生成与底层数据库的 jibes 的 SELECT 的方法。

【问题讨论】:

    标签: c# linq datacontext loops


    【解决方案1】:

    您可以使用select name from sys.tables 和使用 SqlQuery(假设您使用的是 EF)通过 LINQ 枚举表名:

    var result = db.Database.SqlQuery("select * from " + yourTableName).ToList();
    

    【讨论】:

    • 我认为这将绕过我正在尝试测试的机制。我想在这个测试中验证的是,我正在部署的项目中的 .dbml 文件是针对我们正在开发的数据库的同一版本运行的。开发人员有这种对数据库进行更改的习惯,并且未能将此类更改记录在商定的位置,例如部署计划文档。我自己是最严重的罪犯之一。如果我们忘记将数据库更改与应用程序一起部署,我希望我的测试功能中断。
    • 好点。您可以尝试反映您的 dbml。为什么不构建一个读取每个表的工具呢?我意识到您将不得不手动编写代码。不是傻瓜,但总比没有好。
    猜你喜欢
    • 2021-09-27
    • 2011-09-11
    • 2016-09-16
    • 2018-10-06
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    相关资源
    最近更新 更多