【问题标题】:Use Dapper to convert a collection of objects to a TableValuedParameter使用 Dapper 将对象集合转换为 TableValuedParameter
【发布时间】:2018-01-03 12:20:14
【问题描述】:

我正在尝试在 dapper 中使用 TVP 像这样一次插入几行:

                con.Execute(@"
INSERT INTO Author (
    FirstName,
    LastName,
    ParentAuthor
)
SELECT
    FirstName,
    LastName,
    ParentAuthor
FROM @TVP
"
                    , new[]
                    {
                        new Author { FirstName = "Roger", LastName = "Smith", ParentAuthor = 1},
                        new Author { FirstName = "Stan", LastName = "Smith"},
                        new Author { FirstName = "Haley", LastName = "Smith"},
                        new Author { FirstName = "Francine", LastName = "Ling"}
                    } // .AsTableValuedParameter() => not working
                );

但是有没有一种方便的方法可以将对象集合转换为 TableValuedParameter?

【问题讨论】:

    标签: dapper table-valued-parameters


    【解决方案1】:

    我发现了fast-member,然后可以这样简单地完成:

                    var items = new[]
                    {
                        new Author {FirstName = "Roger", LastName = "Smith", ParentAuthor = 1},
                        new Author {FirstName = "Stan", LastName = "Smith"},
                        new Author {FirstName = "Haley", LastName = "Smith"},
                        new Author {FirstName = "Francine", LastName = "Ling"}
                    };
    
                    var table = new DataTable();
                    using (var reader = ObjectReader.Create(
                        items,
                        nameof(Author.FirstName),
                        nameof(Author.LastName),
                        nameof(Author.ParentAuthor)
                    ))
                    {
                        table.Load(reader);
                    }
    
                    con.Execute(@"
    INSERT INTO Author (
        FirstName,
        LastName,
        ParentAuthor
    )
    SELECT
        FirstName,
        LastName,
        ParentAuthor
    FROM @TVP
    "
                        , new { TVP = table.AsTableValuedParameter("TVP_Author") }
                    );
    

    如果有类似功能的内置dapper,我还是想知道。

    【讨论】:

      猜你喜欢
      • 2020-04-21
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多