4

我们希望转而使用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 完成吗?

与往常一样,任何建议都非常感谢。

4

1 回答 1

3

目前无法在 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; }
    }
}

您可以在不指定泛型参数的情况下使用dynamic/来获取。IDictionary<string,object>Query

于 2013-02-12T09:33:23.733 回答