如何使用.NET和Dapper.NET执行此sql语句?(How can I execute this sql statement with .NET and Dapper.NET?)

编程入门 行业动态 更新时间:2024-10-28 08:18:05
如何使用.NET和Dapper.NET执行此sql语句?(How can I execute this sql statement with .NET and Dapper.NET?)

我有以下sql查询:

BEGIN TRAN; UPDATE [dbo].[Foo] SET StatusType = 2 WHERE FooId = xxx; INSERT INTO [dbo].[FooNotes] (FooId, Note) VALUES ('blah....', xxx); ROLLBACK TRAN;

这是一个id的列表。 例如。

var fooIds = new [] { 1, 2, 3, 4, 5, 6 };

所以我希望这个......

BEGIN TRAN; UPDATE [dbo].[Foo] SET StatusType = 2 WHERE FooId = 1; INSERT INTO [dbo].[FooNotes] (FooId, Note) VALUES ('blah....', 1); UPDATE [dbo].[Foo] SET StatusType = 2 WHERE FooId = 2; INSERT INTO [dbo].[FooNotes] (FooId, Note) VALUES ('blah....', 2); UPDATE [dbo].[Foo] SET StatusType = 2 WHERE FooId = 3; INSERT INTO [dbo].[FooNotes] (FooId, Note) VALUES ('blah....', 3); ROLLBACK TRAN;

这可以用Dapper完成吗?

注意:如果TRAN使这很难,我可以放弃它。

I have the following sql query:

BEGIN TRAN; UPDATE [dbo].[Foo] SET StatusType = 2 WHERE FooId = xxx; INSERT INTO [dbo].[FooNotes] (FooId, Note) VALUES ('blah....', xxx); ROLLBACK TRAN;

and this is for a list of id's. eg.

var fooIds = new [] { 1, 2, 3, 4, 5, 6 };

so then I expect this..

BEGIN TRAN; UPDATE [dbo].[Foo] SET StatusType = 2 WHERE FooId = 1; INSERT INTO [dbo].[FooNotes] (FooId, Note) VALUES ('blah....', 1); UPDATE [dbo].[Foo] SET StatusType = 2 WHERE FooId = 2; INSERT INTO [dbo].[FooNotes] (FooId, Note) VALUES ('blah....', 2); UPDATE [dbo].[Foo] SET StatusType = 2 WHERE FooId = 3; INSERT INTO [dbo].[FooNotes] (FooId, Note) VALUES ('blah....', 3); ROLLBACK TRAN;

Can this be done with Dapper?

NOTE: If the TRAN makes this hard, I can drop that.

最满意答案

Dapper对内部更改查询的支持很少(它支持IN列表扩展,文字注入和一些OPTION / UNKNOWN调整。这里有两个选项:

使用StringBuilder创建一个可以执行的大型操作(可以通过字典进行参数化) 将事务移动到ADO.NET而不是TSQL

对于后者,可能是这样的:

using(var tran = conn.BeginTransaction()) { try { conn.Execute(@" UPDATE [dbo].[Foo] SET StatusType = 2 WHERE FooId = @id; INSERT INTO [dbo].[FooNotes] (FooId, Note) VALUES ('blah....', @id);", fooIds.Select(id => new { id }), transaction: tran); } finally // in this example, we always want to rollback { tran.Rollback(); } }

Dapper has only minimal support for altering queries internally (it supports list expansion for IN, literal injection, and some OPTION/UNKNOWN tweaks. You have two options here:

use StringBuilder to create a single large operation that you can execute (this can be parameterized via a dictionary) move the transaction to ADO.NET rather than TSQL

For the latter, perhaps something like:

using(var tran = conn.BeginTransaction()) { try { conn.Execute(@" UPDATE [dbo].[Foo] SET StatusType = 2 WHERE FooId = @id; INSERT INTO [dbo].[FooNotes] (FooId, Note) VALUES ('blah....', @id);", fooIds.Select(id => new { id }), transaction: tran); } finally // in this example, we always want to rollback { tran.Rollback(); } }

更多推荐

本文发布于:2023-07-26 08:13:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1272933.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何使用   语句   NET   sql   Dapper

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!