C# 单元测试实体框架6 CF中存在的每个表和属性?

C# 单元测试实体框架6 CF中存在的每个表和属性?,c#,entity-framework,C#,Entity Framework,我们在EF6中首先使用代码。我们有70多个表,每个表/列都有一个与之相关联的映射,因为我们对C使用的命名格式与遗留数据库不同 代码优先不会在编译时按设计检查这些映射的有效性。所以我想写一个单元测试,它将循环遍历表和每个属性,然后检查它们是否存在,即给我一个BAD列表,然后我可以修复它们 以下是我目前掌握的代码: Entities entity = new Entities(); entity.Database.Log = msg => Debug.Writ

我们在EF6中首先使用代码。我们有70多个表,每个表/列都有一个与之相关联的映射,因为我们对C使用的命名格式与遗留数据库不同

代码优先不会在编译时按设计检查这些映射的有效性。所以我想写一个单元测试,它将循环遍历表和每个属性,然后检查它们是否存在,即给我一个BAD列表,然后我可以修复它们

以下是我目前掌握的代码:

        Entities entity = new Entities(); 
        entity.Database.Log = msg => Debug.WriteLine(msg);
        List<string> sql = new List<string>();
        List<string> error = new List<string>();

        foreach (var table in ((object)entity).GetType().GetProperties())
        { 

            foreach (var row in table.GetType().GetProperties())
            {
                try
                { 
                    var rtn = entity.Database.ExecuteSqlCommand(string.Format("select {0} from {1}", row.Name, table.Name));
                }
                catch (Oracle.ManagedDataAccess.Client.OracleException ex)
                { 
                    sql.Add(string.Format("select {0} from {1}", row.Name, table.Name));
                    error.Add(ex.Message);
                }
            }
        }
这段代码除了速度慢之外,还有一个问题,那就是它也无法获取EF6 CF中使用的ToTable和[Column]映射。因此,即使表/属性确实存在,SQL查询实际上也会失败

理想情况下,我希望为表调用实际的EF6上下文对象,例如entities.TableWhatever。首先,但如何循环,然后以这种方式调用每个对象,而不必一次写一行,即如何循环


所以实际上我有两个问题,要么我需要检索映射来编写原始SQL,要么我需要调用实际的EF6对象以便它为我处理发送映射。我真正想要运行的是为EF6上下文中的每个表从[table]中选择*

挑剔:如果它与数据库交互,就不是单元测试;这是一个集成测试。它不应该在每个版本上运行,它应该在CI服务器的版本上运行。这是您隐含的问题,我如何使用反射读取自定义属性?在EF6中,ToTable映射样式似乎没有使用自定义属性。所以我不确定这是否对我有帮助。我唯一的问题是,如何循环EF6CF上下文中的每个表,并从中提取第一个数据。我是如何做到这一点的是学术性的,但我很乐意引入映射并编写原始SQL,我也很乐意在DBContext中调用DBSet对象,但目前我还不知道如何做到这一点。