情况
我想启用DbContext
基于实体框架 6 的单元测试。我已经DbContext
使用数据库优先方法创建了我和我的模型,现在有一个.edmx设计器文件。
问题
我自动创建DbContext
的确实覆盖了DbContext.OnModelCreating
这样的方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
我正在尝试根据本文DbContext
的信息在我的模拟数据访问服务中创建我的新实例。我的代码没有像这篇博文的作者指出的那样运行。我的构造函数看起来和他的一模一样。我的初始化如下所示:Database.SetInitializer;
DbContext
public DatabaseEntities(DbConnection connection)
: base(connection, true) { }
达到前面提到的覆盖时会导致以下异常OnModelCreating
System.Data.Entity.Infrastructure.UnintentionalCodeFirstException: '上下文在 Code First 模式下使用,代码是从 EDMX 文件生成的,用于 Database First 或 Model First 开发。这将无法正常工作。要解决此问题,请不要删除引发此异常的代码行。如果您希望使用 Database First 或 Model First,请确保 Entity Framework 连接字符串包含在启动项目的 app.config 或 web.config 中。如果要创建自己的 DbConnection,请确保它是 EntityConnection 而不是其他类型的 DbConnection,并且将其传递给采用 DbConnection 的基本 DbContext 构造函数之一。要了解有关 Code First、Database First 和 Model First 的更多信息,请参阅此处的实体框架文档:http://go.microsoft.com/fwlink/?LinkId=394715 '
关于 stackoverflow 有很多问题,它们专注于在使用数据库优先方法时努力进行单元测试,但似乎没有人像我一样遇到类似的问题。
我已经尝试过的事情
问题
我如何创建和使用内存数据库(努力)?
附加信息
当我取消注释OnModelCreating()
时,第一次访问 DataContext 时将引发异常。例如:
DbConnection effortConnection = Effort.DbConnectionFactory.CreatePersistent("MockedDatabaseEntities");
using (DatabaseEntities dataContext = new DatabaseEntities(effortConnection))
{
dataContext.Students.Count(); // Exception throws here
}
System.Data.Entity.ModelConfiguration.ModelValidationException: '在模型生成期间检测到一个或多个验证错误:MyApplication.Shared.Model.KeyValuePair::EntityType'KeyValuePair'没有定义键。定义此 EntityType 的键。KeyValuePairs:EntityType:EntitySet 'KeyValuePairs' 基于没有定义键的类型 'KeyValuePair'。