Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试时的工作量问题_C#_.net_Entity Framework_Unit Testing - Fatal编程技术网

C# 测试时的工作量问题

C# 测试时的工作量问题,c#,.net,entity-framework,unit-testing,C#,.net,Entity Framework,Unit Testing,由于在内存中设置数据库是多么“容易”,所以我一直在阅读关于使用努力进行单元测试的文章。我一直试图在我的测试数据服务中实现这一点,但我一直遇到问题。 我使用的是实体框架6和从现有表生成的模型 上下文模型 public partial class Entities : DbContext { public Entities() : base("name=Entities") { } //Overloading for effort unit test

由于在内存中设置数据库是多么“容易”,所以我一直在阅读关于使用努力进行单元测试的文章。我一直试图在我的测试数据服务中实现这一点,但我一直遇到问题。 我使用的是实体框架6和从现有表生成的模型

上下文模型

public partial class Entities : DbContext
{
    public Entities()
        : base("name=Entities")
    {
    }

    //Overloading for effort unit test
    public Entities(DbConnection connection) : base(connection,true)
    {

    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<REPAIR_CHECK_IN_TABLE> REPAIR_CHECK_IN_TABLEs { get; set; }
    public virtual DbSet<tblPlanarWarranty> tblPlanarWarranties { get; set; }
}
最初我会得到以下错误

ADO.NET提供程序没有固定名称为“efforce.provider”的实体框架提供程序

然后,我将所述提供者添加到应用程序配置文件的“我的提供者”部分,并开始接收此错误

实体框架提供程序类型“Effort.ProviderServices,Effort,Version-1.0.0.0”的“实例”成员未返回从“System.Data.entity.Core.Common.DBProviderServices”继承的对象


有人知道我做错了什么吗?在网站上,这就像几行一样简单,但这已经变成了一团乱麻。

小心!当使用EF6时,不要安装ZZZ项目的努力

通过相同的ZZZ项目安装efforce.EF6

class SchoolDbContext : DbContext
{
    // the standard constructors you probably already use:
    public SchooldDbContext() : base(...) {}
    public SchoolDbContext(string nameOrConnectionString) : base(nameOrConnectionString) {}

    // add this one for effort:
    public SchoolDbContext(DbConnection existingConnection, bool contextOwnsConnection) 
        : base(existingConnection, contextOwnsConnection) { }

    ... // DbSets, etc
使用干净的空数据库 重用数据库 此数据库将在程序运行期间保持。该模型将只进行一次creade

const string dbName = "MyDb"
var dbConnection = Effort.DbConnectionFactory.CreatePersistent(dbName);
using (var dbContext = new SchoolDbContext(dbConnection)
{
      dbContext.Schools.Add(new School {...});
      dbContext.SaveChanges();
}

dbConnection = Effort.DbConnectionFactory.CreatePersistent(dbName);
using (var dbContext = new SchoolDbContext(dbConnection)
{
     var schoolCount = dbContext.Schools.Count();
     // expect the school you just added
}

那么,您的efforce.ProviderServices类不是从System.Data.Entity.Core.Common.DBProviderServices继承的吗?我认为错误很明显这是真的,我更关心的是如何正确地实现这一点,因为这里是我必须处理的所有问题。您使用的是Effort.EF6版本吗?来自您链接的评论:
完成此操作后,我可以使用nuget的EF6“efforce.EF6”库(与没有EF6的“efforce”库不同)和数据库优先方法使示例正常工作。
谢谢,这就成功了您是我的英雄!我希望我能把分数作为答案,但分数还不够。谢谢你指出,我完全忽略了另一个nugut软件包。
var dbConnection = Effort.DbConnectionFactory.CreateTransient();
using (var dbContext = new SchoolDbContext(dbConnection, true)
{
      dbContext.Schools.Add(new School {...});
      dbConext.SaveChanges();

      // this database exists as long as the connection exists
      var schoolCount = dbContext.Schools.Count();
      // expect one school
}

// a new empty database will be created: there won't be any schools
dbConnection = Effort.DbConnectionFactory.CreateTransient();
using (var dbContext = new SchoolDbContext(dbConnection)
{
     var schoolCount = dbContext.Schools.Count();
     // expect no schools
}
const string dbName = "MyDb"
var dbConnection = Effort.DbConnectionFactory.CreatePersistent(dbName);
using (var dbContext = new SchoolDbContext(dbConnection)
{
      dbContext.Schools.Add(new School {...});
      dbContext.SaveChanges();
}

dbConnection = Effort.DbConnectionFactory.CreatePersistent(dbName);
using (var dbContext = new SchoolDbContext(dbConnection)
{
     var schoolCount = dbContext.Schools.Count();
     // expect the school you just added
}