2011-09-21 118 views
1

我正在使用实体框架。单元测试期间的实体框架错误

在我的单元测试我有这样一行:

this.Set<T>().Add(entity); 

在执行这条线,我得到:

System.InvalidOperationException:该模型支持的 “InvoiceNewDataContext”上下文有自从数据库被更改为 创建。可以手动删除/更新数据库,也可以使用IDatabaseInitializer实例调用 Database.SetInitializer。对于 例如,DropCreateDatabaseIfModelChanges战略将 自动删除并重新创建数据库,并任选地用新的数据种子它 。

嗯,我实际上已经删除了数据库,并删除连接字符串。

我很惊讶,这个错误是在增加,因为我不希望它发生,直到我保存的数据发生的事情,它发现没有数据库。

在以前的项目/解决方案,我在单元测试,我已经能够增加用于测试目的的情况下,而不实际调用SaveChanges创建。

会有人知道为什么会在我的最新项目/解决方案,是这样吗?

+1

您是否在应用程序启动或测试初始化​​程序方法中使用初始化策略?你是什​​么意思'删除coonnectionstring'? –

+0

是的,我正在使用初始化策略,并且在测试项目的app.config中有一个连接字符串。我希望测试在没有数据库的情况下运行,所以我删除了这个连接字符串并将初始化策略注释掉了。 – AnonyMouse

回答

1

你确定它确实没有在你以前的项目中使用数据库吗?如果您不指定任何连接字符串,它将默认使用默认的SQLExpress数据库和本地.mdf文件,因此请确保现在不会发生这种情况。

+0

那么现在我将它与http://blogs.clariusconsulting.net/kzu/how-to-design-a-unit-testable-domain-model-with-entity-framework-code上的示例进行比较-first /这似乎没有关联的数据库,您可以将项目添加到上下文中,如:context.Save(product); context.SaveChanges();当你测试。 – AnonyMouse