相关疑难解决方法(0)

交易与精巧点网

我想在多个表上运行多个insert语句.我正在使用dapper.net.我没有看到任何方法来处理与dapper.net的交易.

请分享您对如何使用dapper.net进行交易的想法.

c# transactions dapper

98
推荐指数
6
解决办法
5万
查看次数

为什么选择SCOPE_IDENTITY()返回小数而不是整数?

所以我有一个以标识列为主键的表,所以它是一个整数.那么,为什么SCOPE_IDENTITY()总是向我的C#应用​​程序返回一个十进制值而不是一个int?这真的很烦人,因为十进制值不会隐式转换为C#中的整数,这意味着我现在必须重写一堆东西,并且有很多辅助方法,因为我使用SQL Server和Postgres,Postgres确实返回一个整数等效功能..

为什么SCOPE_IDENTITY()不只返回一个普通的整数?是否有人通常使用十进制/非身份值作为主键?

sql-server primary-key scope-identity

84
推荐指数
3
解决办法
3万
查看次数

使用dapper.net返回mysql LAST_INSERT_ID()时无效的强制转换

MSSQL在这里已经涵盖了这个问题:

如何使用Dapper执行插入并返回插入的标识?

但是这个解决方案不适用于mysql.

LAST_INSERT_ID()使用mysql转换为整数,您必须这样做:

SELECT CAST(LAST_INSERT_ID() AS UNSIGNED INTEGER);

堆栈跟踪是:

Dapper.<QueryInternal>d__13`1.MoveNext() in sqlMapper.cs:607
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +159
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +36
   Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in sqlMapper.cs:535
Run Code Online (Sandbox Code Playgroud)

有没有人在MySQL中解决这个问题?

编辑:

我已成功完成以下工作:

var id = connection.Query<ulong>("SELECT CAST(LAST_INSERT_ID() AS UNSIGNED INTEGER);").Single();
Run Code Online (Sandbox Code Playgroud)

也许不理想,但它的确有效.

c# mysql dapper

13
推荐指数
2
解决办法
5845
查看次数

Dapper multi insert返回插入的对象

使用Dapper我想实现一个采用IEnumberable类型对象的方法User.现在,User看起来如下:

public class User
{
  public int UserId { get; internal set; }
  public DateTime DateCreated { get; internal set; }
  public DateTime DateChanged { get; internal set; }
  public string Username { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这里的关键在于UserId,DateCreatedDateChanged永远不会通过对象进行设置,因此internal关键字.相反,数据库将填充这些值.

因为对象因此被修改为插入操作的一部分,所以我想返回另一个IEnumerable类型的对象,User但这次填充了相应的属性.

最近我意识到我可以让Dapper循环遍历下面的User对象IEnumerable:

public int Insert(IEnumerable<User> users)
{
  string sql = string.Format("INSERT INTO [User] (Username) VALUES (@Username)");
  return GetOpenConnection().Execute<User>(sql, …
Run Code Online (Sandbox Code Playgroud)

sql dapper sql-insert

8
推荐指数
1
解决办法
3679
查看次数

Dapper和Enums作为字符串

我正在尝试使用Dapper和将数据库Dapper-Extensions序列化为.enumsstring

现在,它们被序列化为整数(在VARCHAR字段内).

有没有办法做到这一点?我可以添加的任何自定义类型映射?

如果我不能通过它,我可能需要回到EF.

.net c# dapper dapper-extensions

6
推荐指数
4
解决办法
7032
查看次数

Dapper得到"指定的演员阵容无效".for ReturnValue参数值

我正在尝试使用SCOPE_IDENTITY将长主键返回到c#,使用DynamicParameter的ReturnValue选项.

以下是Dapper网站的示例代码:

var p = new DynamicParameters();
p.Add("@a", 11);
p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output);
p.Add("@c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

cnn.Execute("spMagicProc", p, commandType: commandType.StoredProcedure); 

int b = p.Get<int>("@b");
int c = p.Get<int>("@c");
Run Code Online (Sandbox Code Playgroud)

我宁愿做以下操作,而不是返回int,因为我的主键字段应该是bigint

var p = new DynamicParameters();
p.Add("@a", 11);
p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output);
p.Add("@c", dbType: DbType.Int64, direction: ParameterDirection.ReturnValue);

cnn.Execute("spMagicProc", p, commandType: commandType.StoredProcedure); 

int b = p.Get<int>("@b");
int c = p.Get<long>("@c");
Run Code Online (Sandbox Code Playgroud)

在我的过程中,我正在使用"RETURN SCOPE_IDENTITY()".

但是,这样做似乎导致"指定演员表无效".例外.

c# stored-procedures dapper

5
推荐指数
1
解决办法
4405
查看次数

插入、更新、删除记录时返回记录的id

当我使用 Dapper 插入、更新或删除实体时,我需要返回id实体的。

我正在使用这段代码:

var role = await roleConnection.ExecuteAsync("UPDATE Role SET IsDelete = @isDelete, RoleName = @roleName, SecurityStamp = @securityStamp WHERE Role.Id = @id SELECT SELECT CAST(SCOPE_IDENTITY() AS INT)"
                     , new
                     {
                         isDelete = request.IsDelete = false,
                         roleName = request.RoleName,
                         securityStamp = Guid.NewGuid(),
                         id = request.Id
                     });
Run Code Online (Sandbox Code Playgroud)

但它没有向我显示任何内容。

我怎样才能做到这一点?

c# asp.net dapper asp.net-core

2
推荐指数
1
解决办法
4372
查看次数

NET Core的Dapper:插入表格并返回插入行的ID

我的存储库中有以下方法。到目前为止,我相信返回的int只是一个指示操作是否成功的int。我希望int是成功执行后返回的id(即表的单列)。我该如何完成?

    public async Task<int> AddNewGroup()
    {
        using(_connection)
        {
            _connection.Open();
            var id = await _connection.ExecuteAsync("INSERT INTO groups").Single();
        }
    }
Run Code Online (Sandbox Code Playgroud)

dapper asp.net-core

1
推荐指数
2
解决办法
5811
查看次数