gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 22:55:20 25 4
gpt4 key购买 nike

我有一个解决方案,包含多个项目。到目前为止,一切都运行得很好,甚至从引用的项目中调用方法也是如此。

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

我有一个 Form1,它创建实体模型的实例。该模型是从 MySQL 数据库创建的。当我启动 Form-Project 时,从 Form1 实例化确实可以正常工作。但是,当我引用单元测试项目中的所有内容(仅实例 Form1)时,EF 似乎有问题。我得到的是包含以下内容的实体模型实例:

*编辑:我得到的错误是:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 'FROM ((SELECTCASE WHEN (Extent2.ID 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")....

它有效。

毕竟,这似乎可能是一个延迟加载问题?

最佳答案

您所看到的基本上是一个功能,而不是一个错误。这称为延迟加载。如果您不询问,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() ?),这会导致最新 EF 6.1.2 版本在与最新的 MySQL 连接器。您是否有可能在两个项目中使用不同版本的 EF?您可以尝试降级到 EF 6.1.1 吗?

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

关于C# - EF 6 - MySQL : Error when calling method from unit test method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28737611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com