1

所以我最近在一些项目中使用了 dapper,我很好奇以下示例之间是否存在任何性能差异:

对于具有许多属性 30+ 的对象,明确说明属性而不是让它自己弄清楚有什么好处?

选项1:

string sqlQuery = @"INSERT INTO [PTTicket]
                                     ([Id])
                               VALUES
                                     (@Id)";
con.Execute(sqlQuery, ptTicket);

选项 2:

string sqlQuery = @"INSERT INTO [PTTicket]
                                     ([Id])
                               VALUES
                                     (@Id)";
con.Execute(sqlQuery, 
                     new 
                     { 
                         ptTicket.Id 
                     }

我只是好奇手动提供值是否有任何好处,或者我是否可以传递对象并让 Dapper 拥有它的方式。

特别是随着列表开始增长:

选项 1b

string sqlQuery = @"INSERT INTO [PTTicket]
                                         ([Id]
                                         ,[Name]
                                         ,[SMState]
                                         ,[CreatedByMember]
                                         ,[StartDate]
                                         ,[ClosedDate]
                                         ,[Remarks])
                                   VALUES
                                         (@Id
                                         ,@Name
                                         ,@SMState
                                         ,@CreatedByMember
                                         ,@StartDate
                                         ,@ClosedDate
                                         ,@Remarks)";
con.Execute(sqlQuery, ptTicket);

选项 2b。

string sqlQuery = @"INSERT INTO [PTTicket]
                                       ([Id]
                                       ,[Name]
                                       ,[SMState]
                                       ,[CreatedByMember]
                                       ,[StartDate]
                                       ,[ClosedDate]
                                       ,[Remarks])
                                 VALUES
                                       (@Id
                                       ,@Name
                                       ,@SMState
                                       ,@CreatedByMember
                                       ,@StartDate
                                       ,@ClosedDate
                                       ,@Remarks)";
con.Execute(sqlQuery,
                    new
                    {
                        ptTicket.Id,
                        ptTicket.Name,
                        ptTicket.SMState,
                        ptTicket.CreatedByMember,
                        ptTicket.StartDate,
                        ptTicket.ClosedDate,
                        ptTicket.Remarks
                    });
4

1 回答 1

1

对于内联 TSQL,不,它们应该大致相同。Dapper 对命令进行了一些简短的检查,以决定发送哪些属性,但这是非常基本的。如果你有这样的评论:

-- phew, it is a good job we didn't pass in @LongDescription, because
-- that could be 2GB in size!

那么这足以让 dapper send .LongDescription

如果您正在使用存储过程,则不可能进行此类检查,因此它将发送它可以看到的所有内容。

于 2014-03-13T10:10:20.067 回答