【问题标题】:C# - EF 6 - MySQL: Error when calling method from unit test methodC# - EF 6 - MySQL:从单元测试方法调用方法时出错
【发布时间】:2015-02-26 08:29:46
【问题描述】:

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

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

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

*edit: 我得到的错误是: 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'FROM ((SELECT CASE WHEN (Extent2.ID IS NULL) THEN (NULL) ELSE (1) END AS ' at line 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();

end 然后尝试通过使用获取上述内容

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

它有效。

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

【问题讨论】:

  • 我不知道是不是只有我一个人,但我已经读过你的问题几次了,我看不出你的错误是什么,你似乎只是解释了发生了什么而不是怎么了?
  • 在尝试确定问题后编辑了问题。感谢您的帮助。

标签: c# mysql entity-framework unit-testing entity-framework-6


【解决方案1】:

你看到的基本上是一个特性,而不是一个错误。它被称为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 吗?

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

【讨论】:

  • 这对我的整体理解很有帮助。但我不认为,这就是问题所在。两个项目:Windows 窗体和 Windows 服务。实例化表单调用方法,实例化实体模型。从那里开始,我可以使用模型和实例列表等,这不是问题。当我调用相同的方法时,表单正在调用,以从服务项目中实例化实体模型,我得到了上述内容,即使所有引用都已设置并且应该可以工作。问题可能出在应用配置上,还是与服务项目中没有模型有关?
  • 调用anyOfYourCollections.ToList()时有没有报错?
  • 是的,这是,当我得到异常时。该模型正在实例化而没有错误。但是在填写任何列表时,我都会收到错误消息。这是我查看对象并看到上述内容的时候。
  • 哪个例外?请在您的问题中发布。
  • 这是版本问题。从 6.1.2 降级到 6.1.1 时,它起作用了。非常感谢!
猜你喜欢
  • 2023-03-06
  • 2021-05-18
  • 2023-01-09
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 2017-12-21
相关资源
最近更新 更多