使用Dapper

时间:2015-11-19 09:12:32

标签: c# dapper dynamicobject

我使用Dapper查询一个巨大的表(超过300列)。

此表由类表示。现在,我不希望这个类有300个属性,所以我认为,因为大部分列都遵循B001B299的简单命名模式,我会上课继承自DynamicObject并在构造函数中添加我的动态成员,如下所示:

class HugeTable : DynamicObject 
{
    Dictionary<string, object> _dynamicMembers = new Dictionary ...

    public override bool TryGetMember(GetMemberBinder binder, out object result) {
        // simply delegate to the dictionary
    }

    public override bool TrySetMember(SetMemberBinder binder, object value) {
        // same here
    }

    public HugeTable() 
    {
        for (var i = 1; i < 300; i++)
        {
            _dynamicMembers.Add(...);
        }
    }
}

我认为Dapper也会填充我的动态属性,但事实并非如此。 TrySetMember没有被点击,所以我猜Dapper并没有尝试将结果中的列映射到动态成员。

我无法深入到Dapper的内部,看看映射是如何工作的,但我确实知道,对从DynamicObject继承的类使用反射不会返回动态成员。如果这就是Dapper的工作方式,我恐怕已经搞砸了。

我有什么遗失的吗?我是否可以选择输入(生成,真正)300个属性?

仅针对上下文,我需要所有列,因为该对象(实际上非​​常类似)需要暴露给IronPython脚本,并且语法如下:

obj.b001 + obj.b002

比说起来要麻烦得多:

obj['b001'] + obj['b002']

我真的更喜欢它,因为编写这些脚本的人不一定是软件工程师。

0 个答案:

没有答案