我有一个包含多个项目的解决方案。到目前为止,一切都运行得很好,甚至从引用的项目中调用方法。
现在我尝试开始使用单元测试,因此我可以测试不同的方法,而不会遇到GUI的全部开销等等。
我有一个Form1,它创建一个实体模型的实例。此模型是从MySQL数据库创建的。当我启动Form-Project时,从Form1进行实例化没有问题。但是当我在单元测试项目中引用所有内容时,只是实例Form1,EF似乎有问题。我得到的是我的实体模型的实例,其中包含以下内容:
*编辑:我得到的错误是:
您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在' FROM附近使用正确的语法((SELECT
情况何时(Extent2
。ID
为空)然后(空)ELSE(1)结束AS'在第188行
我设法看到有些列表被填满,有些则没有。但是我真正不理解的是,为什么当从project1调用时,整个工作正常,并且从另一个项目调用,引用project1时,会导致该错误。
例如:table1.toList()起作用,table2.toList()给出上述错误。但是只有从project2调用时才会。
* edit2:我设法把它钉了下来
导致错误的行是:
technikerListe = entities.mitarbeiter.
Where(m => MitarbeiterIdListe.Contains(m.ID) && m.aktiv == "Y")....
(其中entity是我的模型实例)
但是当我得到mitarbeiter表中的条目列表时,就像这样
List<mitarbeiter> mitarbeiterList = entities.mitarbeiter.ToList();
然后尝试使用
来获得上述内容technikerListe = mitarbeiterList.
Where(m => MitarbeiterIdListe.Contains(m.ID) && m.aktiv == "Y")....
它有效。
毕竟,这似乎是一个懒惰的加载问题?
答案 0 :(得分:0)
你看到的基本上是一个功能,而不是一个bug。它被称为Lazy-loading
。如果您不提问,EF也不会从数据库中加载任何数据。请考虑以下示例:
using(var ctx = MyCoolContext("ConnectionString"))
{
var query = ctx.Bugs;
var result = query.ToList(); // <= fetching the data is done here!
}
实际行为是EF只会在您枚举结果时对服务器运行查询(使用上面的.ToList()
完成)。
因此,您在上面发布的语句基本上只是当您最终告诉它时,EF将发送给MySQL的查询。
编辑:
阅读你的错误我想你正试图实现多个N到M的关系(可能是.Include()
?),这与最新的MySQL连接器一起使用时会导致最新的EF 6.1.2版本出现问题。您是否有可能在两个项目中使用不同版本的EF?你能尝试降级到EF 6.1.1吗?
请再次提供更多信息,哪些查询失败?