首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dapper抛出“DynamicMethod的无效类型所有者”。

问Dapper抛出“DynamicMethod的无效类型所有者”。
EN

Stack Overflow用户
提问于 2015-05-25 09:32:23
回答 2查看 22K关注 0票数 21

所以我试着使用Dapper.net,我很喜欢它。我不喜欢的是,当我尝试批处理插入实体时,会引发以下错误:

无效的DynamicMethod.类型所有者

在System.Reflection.Emit.DynamicMethod.Init(String名称,MethodAttributes属性,CallingConventions callingConvention,类型returnType,Type[]签名,类型所有者,模块m,布尔skipVisibility,布尔transparentMethod,StackCrawlMark& stackMark)的System.Reflection.Emit.DynamicMethod..ctor(String名称,returnType类型,Type[] parameterTypes,类型所有者,布尔skipVisibility)在Dapper.SqlMapper.CreateParamInfoGenerator(Identity标识,布尔checkForDuplicates,布尔removeUnused,D:\IList\Dapper-net\Dapper NET40\SqlMapper.cs:line 1578中的IList1 literals) in D:\Dev\dapper-dot-net\Dapper NET40\SqlMapper.cs:line 3033 at Dapper.SqlMapper.GetCacheInfo(Identity identity, Object exampleParameters, Boolean addToCache) in D:\Dev\dapper-dot-net\Dapper NET40\SqlMapper.cs:line 2138 at Dapper.SqlMapper.<QueryImpl>d__611.1.MoveNext() 在System.Linq.Enumerable.ToListTSource at Dapper.SqlMapper.QueryT in D:\Dev\Dapper-net\Dapper NET40\SqlMapper.cs:line 1479 at Dapper.SqlMapper.Query(IDbConnection cnn,String sql,Object param,IDbTransaction事务,布尔缓冲,NinjaEvaluation.Data.Database.DapperWrapper.<>c__DisplayClass41.b\_\_3(SqlConnection sqlConnection, SqlTransaction transaction) in c:\Projects\InHouse\ninjaevaluation\NinjaEvaluation\NinjaEvaluation.Data\Database\DapperWrapper.cs:line 52 at NinjaEvaluation.Data.Database.DapperWrapper.Invoke(Action2 c:\Projects\InHouse\ninjaevaluation\NinjaEvaluation\NinjaEvaluation.Data\Database\DapperWrapper.cs:line 68中D:\Dev\Dapper-net\Dapper NET40\SqlMapper.cs:line 1418 )中的可空1 commandTimeout, Nullable1 commandType)

这发生在完全正常的情况下,当我像这样运行我的查询时:

代码语言:javascript
复制
        string sql = @" INSERT INTO XXX
                        (XXXId, AnotherId, ThirdId, Value, Comment)
                        VALUES
                        (@XXXId, @AnotherId, @ThirdId, @Value, @Comment)";

        var parameters = command
            .MyModels
            .Select(model => new
            {
                XXXId= model.XXXId,
                AnotherId= model.AnotherId,
                ThirdId= model.ThirdId,
                Value = model.Value,
                Comment = model.Comment
            })
            .ToArray();

..。

代码语言:javascript
复制
sqlConnection.Query(sql, parameters, commandType: commandType, transaction: transaction)

我发现the following SO-thread是由有相同问题的人启动的,但是问题似乎是.NET版本(3.5),但是我运行的是.NET 4.5,我不知道问题是什么。

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-26 07:54:06

它失败了,因为使用Query[<T>]的这个场景不需要数组/参数序列。Execute调用路径确实预期到这一点,并自动展开数据,每项执行一次SQL,但这不是Query[<T>]的情况,所以它尝试创建绑定到数组的动态方法(在您的例子中),这是不允许的。代码可能会更早地检测到,只需说“不,这是不允许的”。

您可能希望将.ToArray()更改为.Single()。

在下一次构建之后,这将更加清晰;下面是通过的:

代码语言:javascript
复制
    public void SO30435185_InvalidTypeOwner()
    {
        try {
            // not shown for brevity: something very similar to your code
            Assert.Fail();
        } catch(InvalidOperationException ex)
        {
            ex.Message.IsEqualTo("An enumerable sequence of parameters (arrays, lists, etc) is not allowed in this context");
        }
    }
票数 16
EN

Stack Overflow用户

发布于 2018-05-31 15:09:03

在使用接口而不是类时,我遇到了这个错误:

Query<MyObject>工作,而Query<IMyObject>没有

票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30435185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档