正如标题所说,如何在我的代码中查看Entity Framework生成的SQL?我遇到了一个错误,EF正在崩溃,因为数据库生成了一个字段(一个DateTime字段),我想我设置它知道商店是通过StoreGeneratedPattern生成它,但它仍然崩溃,所以我我想知道究竟是什么试图推进数据库。
P.S。我现在只使用EF约一个小时......从L2S切换。
答案 0 :(得分:16)
由于您没有Sql Profiler,因此您最好的选择是LINQPad。您可以使用现有的装配体。
点击Add connection
- > Use a typed data context from your own assembly
- > Entity framework
并选择你的dll。
您可以直接针对您的模型编写查询(或从您的代码中复制粘贴)。选择查询窗口下的SQL
'选项卡'以查看生成的SQL代码。
答案 1 :(得分:5)
您可以使用Entity Framework Profiler(EFProf)。这不是免费的,但有30天的试用版。除了向您展示SQL语句之外,它还能做更多整洁的事情。
答案 2 :(得分:3)
通常,您应始终使用 SQL Profiler 查看EF提交到数据库中的SQL语句。
另外,我认为你误解了StoreGeneratedPattern
是什么。如果您查看模型中的可能值,您会看到它具有 标识 ,这意味着在插入行时将(由数据库)生成该值并且不会改变。其他选项是 Computed ,它指定在插入和更新时生成值, 无 ,这是默认值。
因此,EF不会为您动态生成DateTime字段,您需要手动创建它,然后从数据库更新模型,以便EF生成适当的元数据以在运行时使用它。
答案 3 :(得分:3)
如果由于您使用的是SQL Server Express而导致真正的SQL事件探查器不可用,那么免费的AnjLab Sql Profiler将会正常工作:http://anjlab.com/en/projects/opensource/sqlprofiler。它并不像真实的东西那么好,但它可以很好地完成工作。
答案 4 :(得分:2)
一种解决方案是捕获网络流量并查看该级别的数据。 Microsoft网络监视器在这方面做得很好。
当然,只有在您使用单独的数据库服务器且连接未加密时才有效。