繁体   English   中英

C# - EF 6 - MySQL:从单元测试方法调用方法时出错

[英]C# - EF 6 - MySQL: Error when calling method from unit test method

我有一个解决方案,包含多个项目。 到目前为止,一切都运行得很好,甚至调用参考项目的方法。

现在我尝试开始使用单元测试,因此我可以测试不同的方法,而无需运行GUI的全部开销等等。

我有一个Form1,它创建一个实体模型的实例。 此模型是从MySQL数据库创建的。 当我启动Form-Project时,从Form1进行实例化没有问题。 但是当我在单元测试项目中引用所有内容时,只是实例Form1,EF似乎有问题。 我得到的是我的实体模型的实例包含以下内容:

*编辑:我得到的错误是:你的SQL语法有错误; 检查对应于你的MySQL服务器版本使用附近的正确语法手册'FROM((SELECT CASE WHEN( Extent2ID IS NULL)THEN(NULL)ELSE(1)END AS'在行188

我设法看到有些列表已经填满,有些则没有。 但我真正不明白的是,为什么从project1调用,整个工作正常,并从另一个项目调用,引用project1,它会导致该错误。

例如:table1.toList()工作,table2.toList()给出上述错误。 但仅限于从project2调用时。

* edit2:我设法把它钉了下来

导致错误的行是:

technikerListe = entities.mitarbeiter.
            Where(m => MitarbeiterIdListe.Contains(m.ID) && m.aktiv == "Y")....

(其中实体是我的模型实例)

但是当我在mitarbeiter表中得到这样的条目列表时

List<mitarbeiter> mitarbeiterList = entities.mitarbeiter.ToList();

然后尝试通过使用获得上述

technikerListe = mitarbeiterList.
            Where(m => MitarbeiterIdListe.Contains(m.ID) && m.aktiv == "Y")....

有用。

毕竟,这似乎是一个懒惰的加载问题?

你看到的基本上是一个功能,而不是一个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吗?

请再次提供更多信息,查询失败了什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM