繁体   English   中英

使用Dapper与具有其他动态属性的强类型模型绑定

[英]Using Dapper to bind with a strongly typed model with additional dynamic properties

我们希望转而使用Dapper为我们的业务模型提供对象关系映射。

除了这些数据模型,我们经常遇到由用户创建并显示为返回结果集的一部分的自定义字段(在运行时不知道):

Id
Title
c_MyCustomField1
c_MyCustomField2

目前,所有这些字段都是通过阅读器返回和处理的。 我们希望将所有这些转移到Dapper,但努力研究如何混合强类型对象与动态自定义字段混合。

我们看到这样的选项:

  1. 将dapper的每个结果都视为动态,并进行自己的绑定。
  2. 获取Dapper绑定到强类型模型并单独调用以附加自定义字段。
  3. 扩展Dapper以便在中间添加我们的特定用户案例以绑定已知和动态字段。

1似乎适得其反,我们可能会受到性能影响,这就是为什么你首先要介绍Dapper。 2我们真的无法做到,因为这需要对数据提供者进行大规模更改。 3我知道我不属于Dapper的来源。

我认为圣杯会以这样的模型结束:

class Model
{
    int Id {get; set;}
    string Title {get; set;}
    IList<CustomField> CustomFields {get; set;}
}

class CustomField : dynamic
{
    string Name {get; set;}
    object Value {get; set;}
}

有什么办法可以用Dapper完成吗?

一如既往,任何建议都非常感谢。

目前在短小精悍的地方无法完全模仿; 您可能能够使用非泛型API执行某些操作,然后手动应用绑定。 或者只是包装动态:

class Model {
    private dynamic obj;
    public int Id { get { return obj.Id; } set { obj.Id = value; } }
    public string Title { get { return obj.Title; } set { obj.Title = value; } }

    public object this[string key] {
        get { return ((IDictionary<string,object>)obj)[key]; }
        set { ((IDictionary<string,object>)obj)[key] = value; }
    }
}

您可以使用Query获取dynamic / IDictionary<string,object> ,而无需指定通用参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM