【问题标题】:Dapper: Method not found: 'System.Collections.Generic.IEnumerable`1<!!0> GridReader.Read(Boolean)'Dapper:找不到方法:'System.Collections.Generic.IEnumerable`1<!!0> GridReader.Read(Boolean)'
【发布时间】:2014-01-15 14:23:35
【问题描述】:

我希望用 Dapper 交换一些 EF 代码优先的数据库请求,以加快我们网站的一些缓慢部分。我才刚刚开始尝试,Dapper 看起来还不错。

我已经成功地将一些代码转换为使用 .Query 扩展名。但现在我正在尝试 .QueryMultiple,然后是 .Read 扩展来获取每个结果集。

我试图将 Dapper 代码移到一个新项目中以使其远离我的 MVC 项目,并且 .Query 的东西在那里很好。但是,当我尝试使用 .QueryMultiple 访问方法时,甚至在它遇到代码中的任何断点之前,我都会收到错误消息:

Method not found: 'System.Collections.Generic.IEnumerable`1<!!0> GridReader.Read(Boolean)'.

如果我将代码移到 Web 项目中,它可以正常工作。

我无法弄清楚我需要什么或缺少什么。 Visual Studio 和 ReSharper 似乎很高兴。它正在编译。这只是一个运行时问题。这两个项目都针对 .Net 4.5,都有对 Dapper 的 nuget 引用。 Dapper 项目设置为 Win C# 类库。我查看了 SqlReader.cs 的源代码,它似乎没有任何我还没有的“使用”。我相信 System.Collections.Generic 会自动包含在内,而且在“添加引用”对话框中肯定是不可选择的。

我觉得我错过了一些非常非常明显的东西......

代码如下:

        using (var conn = new SqlConnection(ConnectionString))
        {
            conn.Open();

            // TODO: Add in checks
            const string query = @"
            SELECT * FROM FileCollections WHERE Id = @fileCollectionId
            SELECT * FROM Files f WHERE FileCollection_Id = @fileCollectionId
            SELECT * FROM ExternalLinks WHERE FileCollection_Id = @fileCollectionId
            ";

            // return a GridReader
            using (var result = conn.QueryMultiple(query, new {fileCollectionId}))
            {
                var fileCollection = result.Read<FileCollection>().Single();
                var files = result.Read<File>().ToList();
                fileCollection.Files = files;
                var externalLinks = result.Read<ExternalLink>().ToList();
                fileCollection.ExternalLinks = externalLinks;
                return fileCollection;
            }
        }

【问题讨论】:

  • 我看到了同样的行为。
  • 这很奇怪 - 我看看能不能复制
  • @MarcGravell 您是否设法重新创建了这个?当其他所有内容都在自己的项目中时,我不得不将这些特殊类型的查询分解为我的主项目中的帮助程序,这似乎是一种耻辱。

标签: .net asp.net-mvc c#-4.0 generics dapper


【解决方案1】:

我遇到了完全相同的问题。我的解决方法是通过 Nuget 从 Dapper 1.12.1 升级到 Dapper 1.13 以使其正常工作。

就我而言,问题是我在一个项目中使用了 Dapper 1.13,在同一个解决方案中使用了 Dapper 1.12.1。

希望对您有所帮助!

【讨论】:

  • 我在所有使用 Dapper 的项目中都已经有了 v1.13,但我仍然有同样的错误。如果不将其复制并粘贴到单元测试项目中,我什至无法对代码进行单元测试,如果有必要,这将是非常灾难性的。也许您同时更新了其他内容?
  • 其实我会把它标记为答案,因为尽管 nuget 报告我使用的是 1.13,但调试表明它仍在内部使用 1.12。我不得不添加一个额外的映射字段,因此最终在我的解决方案中使用了 Dapper 的源代码,这确实解决了问题。
  • 看到这篇文章的其他人都知道,1.13 的 Nuget 包似乎有一个 1.12.1.1 的 DLL 版本,正如在 AssemblyInfo.cs 文件中所看到的那样:code.google.com/p/dapper-dot-net/source/browse/Dapper%20NET40/…跨度>
猜你喜欢
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 2019-07-26
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多