c# - 如何编写测试来验证 Entity Framework 数据库第一模型

标签 c# sql-server entity-framework nunit mstest

我有一个 Entity Framework 数据库第一模型。

我想编写一个 MSTest/nUnit 测试来验证我的 edmx 模型中定义的所有存储过程和表在数据库中仍然有效。

我有一个大型开发团队,其中一些只处理存储过程,另一些则使用 c#,我想运行集成测试来验证/验证项目中的 EF 模型。

我在 Linq2Sql 中进行了测试,以查找存储过程调用中常见的属性,然后运行 ​​SQL 查询来验证存储过程是否仍然存在。 我现在已升级到 EF6,并且希望在构建中保留类似的健全性检查。

这就是我到目前为止所拥有的。

 var list = context.MetadataWorkspace.GetItems<EntityType>(DataSpace.CSpace);

 var badSp = new List<string>();

 foreach (var table in list)
 {
     if (!DoesTableExist(dbContext, table))
     {
       badSp.Add(table.Name);
     }
 }

 if (badSp.Any())
 {
            var retval = new StringBuilder();
            retval.AppendLine("The Following Objects do not exist in the database but do not exist the " + dbContext.GetType().Name + ".edmx, they may be obsolete");
            badSp.Sort();
    foreach (var sp in badSp)
    {
       retval.AppendLine(sp);
    }
    Assert.Fail(retval.ToString())  
}

我提出的一些问题是,这并不能告诉我表是否处于不同的架构中。架构返回 null。我有多个模式的表。

我还想做一个类似的测试来验证表和 View ,它们也处于不同的模式中。

最佳答案

我找到了答案:

var list = context.MetadataWorkspace.GetItems<EdmFunction>(DataSpace.SSpace).Where(i=>i.ReturnParameter == null);

这返回了正确的架构和存储过程名称。然后我可以调用列表中的每个项目:

var sqlCommands = string.Format("SELECT 'x' FROM sys.objects WHERE object_id = OBJECT_ID(N'{0}') AND type in (N'P', N'PC')", storedProcedureName);
var exists = dbContext.Database.SqlQuery<string>(sqlCommands).Any();

关于c# - 如何编写测试来验证 Entity Framework 数据库第一模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19847192/

相关文章:

c# - 多次重用 blazor 组件的好方法是什么?

C# 多线程按值传递还是引用传递?

sql - 在 SQL Server 中将一列中的数据拆分为多行

mysql - php sql查询在月份和年份之间选择

c# - 组合与继承。我哪里做错了?

c# - 具有相同表的多个模式的 EF6 中的 Multi-Tenancy

sql - 创建表 : "There is already an object named ... in the database", 但未创建具有该名称的对象时出错

c# - Moq 网络服务的数据源

c# - 在 Code First MVC 应用程序中查询 AspNet Identity 表

entity-framework - 在Entity Framework中执行存储过程,返回List <DataTable>或DataSet