我正在使用EF Core(v1.1.3(和C#。
在我的单元测试中,我使用代码优先的数据库模型创建一个 sqlite 内存数据库,然后用一些测试数据填充它。但是,当从 dB 加载实体列表时,相关实体将被填充,尽管没有 '.包括正在使用的'。
如果我使用相同的模型来创建实际的磁盘数据库并执行相同的加载,则只有在使用.Include
时才加载相关实体。
这是 sqlite 内存中实现 (v1.1.0( 中的错误,还是我错过了什么?
我已经检查了数据库中没有跟踪任何内容,显然我无法处理上下文并更新它,因为它在内存中,并且由于遗留原因,我目前仅限于此版本的 EF 和 Sqlite。
显然,为了性能,我更喜欢为单元测试提供内存中选项,而不是开始创建磁盘测试。
我遇到了完全相同的问题。
您需要做的是为测试创建的实体的状态设置为Detatched
。然后,当您尝试再次读取实体时,EF 将从数据库提取它。
创建新实体后编写此行:
dbContext.Entry(entity).State = EntityState.Detached;