EF6(6.1.3 / net45)记录功能似乎不起作用

时间:2015-05-15 13:07:42

标签: sql-server vb.net oracle logging entity-framework-6

当我尝试运行该行时:     MyDBContext.Database.Log = Console.Write 编译器微笑着告诉我我不知道自己在做什么......

该应用程序将无法编译,因为该行和该行上的错误是: 重载解析失败,因为没有可访问的Write接受此数量的参数。

这是有道理的。 'Console.Write'不返回任何内容,我将其设置为System.Action(Of String)

这似乎有点半烤了。 我尝试了很多方法来修复它,包括委托,以及一些其他“新的可能性”将这个从上下文中移除应该提供但仍然没有骰子。 我错过了什么?它是在最后一刻发生了变化吗?

我在解决方案中有两个大的edmx文件(一个连接到SQL Server,另一个连接到Oracle),所有这些都很有效。 这是我的版本号,如果这可以帮助。 EntityFramework 6.0.0.0(文件夹是... \ EntityFramework.6.1.3 \ lib \ net45 \ EntityFramework.dll) EntityFramework.SqlServer 6.0.0.0(文件夹是... \ EntityFramework.6.1.3 \ lib \ net45 \ EntityFramework.dll) Oracle.ManagedDataAccess.EntityFramework 6.121.2.0

我创建了一个工具,可以将L2S'mycontext.log'的输出粘贴到其中,然后解析它并使用变量创建SSMS就绪SQL ......它非常有用。这是我最喜欢的L2S功能之一。 请帮助我理解为什么这不起作用。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

这项技术对我有用:

    public override int SaveChanges()
    {
        SetIStateInfo();
#if DEBUG
        Database.Log = s => Debug.WriteLine(s);
#endif
        return base.SaveChanges();
    }

http://blogs.msdn.com/b/mpeder/archive/2014/06/16/how-to-see-the-actual-sql-query-generated-by-entity-framework.aspx

答案 1 :(得分:0)

嗯,答案是研究Action(T) Delegate,它向我展示了如何做到这一点。

#If DEBUG Then
      myctx.Database.Log = AddressOf Console.Write
#End If

只需要AddressOf,我又回来了。