1

这是我使用 VS 2012 Ultimate 设置的解决方案:

我有一个项目(例如 MyDomainModel),其中包含使用 POCO 类的所有业务领域类型。我有另一个引用 MyDomainModel 项目的项目(例如 MyEntity),并且派生的 DbContext 类(例如 MyDbContext)在 SaveChanges 方法中实现自定义业务逻辑(例如,用于插入和修改数据时的自动时间戳)。

我有另一个基于 mstest 的项目(例如 MyEntity_Tests),它将使用已知的种子数据测试派生的 DbContext(例如 MyDbContext),作为数据库初始化的一部分。

我的问题是在调试测试时,MyDbContext的c#代码上设置的断点没有命中。但是,如果我在文件中放入诸如 Debug.Print("xxx") 之类的行并调试相同的测试,则测试输出将包含那些预期的输出“xxx”。

我知道实体框架运行时会在后台生成代理 dll 来包装这些 dll(例如 MyDomainModel.dll)。但是,无法像在 MyDbContext 中那样调试我自己的代码对我来说确实是一个大问题。其他人在使用 EF 代码优先时是否有类似的问题以及如何解决这个问题?

4

1 回答 1

0

在派生的 DbContext 类中的一行上设置断点开始调试并将鼠标悬停在它上面,看看为什么它没有被命中。最有可能的符号未加载。调试时转到加载的模块窗口,右键单击您的程序集,您可以检查 VS 尝试从何处加载符号。您也可以手动加载符号。请注意,如果符号与程序集不匹配,您需要重新构建项目以获取最新的符号。没有命中断点的另一个原因可能是您的源代码与程序集不匹配。您可以取消选中“设置”->“调试”中的复选框以启用对与程序集不匹配的源的调试,但这样的调试既痛苦又适得其反。再次重建应该会有所帮助。我假设您正在尝试调试程序集的调试版本而不是发布版本。

于 2012-12-05T23:48:05.217 回答