【问题标题】:Dapper - Multi mapping & Multiple returned cursorsDapper - 多映射和多返回游标
【发布时间】:2019-03-01 19:02:44
【问题描述】:

我一直在寻找一组相当复杂的 Dapper 代码,它允许我调用存储过程并让它读取 3 个游标。但是有一个转折……第一个光标返回一个对象,其中包含 7 个映射对象(类中有七个一对一的关系)。其他两个游标返回类包含并存储在对象集合中的多个对象(一对多)。

所以,我可以使用 QueryMultipe 让多个游标工作,然后调用 Read & ReadSingle。这会填充基类而不填充任何复杂类型,但它确实填充了类中的两个列表。

另外,我可以在“types”参数中调用具有 8 种类型的 Query(因为您可以映射到的类型数量有限制,超过了进行构造的 Func 提供的 7 种)。

但是...似乎没有 ReadSingle 方法可以接受超过 7 种类型的映射,并且他们对 Query 所做的相同更改(允许发送无限类型)没有添加到 ReadSingle 方法通过他们的存储库中的this change...或者至少我找不到或弄明白。

有没有人遇到过这个限制并且能够绕过它而无需重写存储过程? (对于这个项目来说,重写存储过程是有问题的——原因很长。)

为了澄清,我有一个像下面这样的类,它由一个存储过程调用填充 - 我正在寻找一个对这个存储过程的 Dapper 调用来一次填充这个对象:

public class Foo
{
    private long simpleTypeA;
    private string simpleTypeB;
    private Complex1 complexType1; // complexType1 thru 7 get sent in with the 1st cursor as part of joins on tables in the SQL
    private Complex2 complexType2;
    private Complex3 complexType3;
    private Complex4 complexType4;
    private Complex5 complexType5;
    private Complex6 complexType6;
    private Complex7 complexType7;
    private List<Complex8> complexType8; // Gets sent in with 2nd cursor
    private List<Complex9> complexType9; // Gets sent in with 3rd cursor

    // ... property implementation & constructor here
}

【问题讨论】:

标签: .net-core dapper


【解决方案1】:

我最终不得不拆分我的 SQL 存储过程,以便在一个过程中返回大量数据,并在另一个过程中返回与对象列表相关的游标(一对多)。这似乎是 Dapper 的一个不足之处,尽管有人认为任何数据库中的存储过程都不应该一次返回如此复杂的数据集。这是一个我可以支持的论点,特别是因为我最初没有编写这些程序。 ;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多