标签: dapper

带有 GUID Id 的简洁 CRUD

我对 Dapper 和 Dapper.SimpleCRUD ( https://github.com/ericdc1/Dapper.SimpleCRUD )还很陌生,所以如果我有点笨,请原谅。我有一个使用 GUID Id(主键)而不是自动递增 int Id 的现有数据库。看起来 Dapper/SimpleCRUD 假设是后者。我想我也许能够找到替代方案(也许是精巧的扩展?),但我想知道是否有人遇到过这个并对其进行了调整/找到了其他解决方案。Dapper Extensions ( https://github.com/tmsmith/Dapper-Extensions ) 似乎也基于 int Ids。感谢您的建议。

orm dapper dapper-extensions

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

DapperORM 中“SELECT CAST(SCOPE_IDENTITY() as int)”的重要性

我是 C# 新手,而且绝对是 Dapper.NET 新手。这是我第一次接触 ORM 和框架,所以我想更多地了解一些语法。

我看过几个INSERT查询并注意到所有查询都有这个

SELECT CAST(SCOPE_IDENTITY() AS INT);
Run Code Online (Sandbox Code Playgroud)

行后INSERT INTO...;

我想知道它的重要性或用途。谢谢

编辑:这是我编写的一些代码,并且根据我的测试,它们正在工作。

这是Users.cs

public class Users
{
    private int _uid;
    private string _fullname;
    private string _username;
    private string _passcode;

    public int uid
    {
        get { return _uid; }
        set { _uid = value; }
    }

    public string fullname
    {
        get { return _fullname; }
        set { _fullname = value; }
    }

    public string username
    {
        get { return _username; } …
Run Code Online (Sandbox Code Playgroud)

.net c# orm frameworks dapper

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

如何使用 dapper 保存整个数据表?

我有一个充满数据的 DataTable 对象,并想将其保存到 SQL-DB (我不想运行 foreach 循环来执行插入),我的代码如下:

var dt = new DataTable();
//
// ... data loading to table dt
//

string sql = @"
INSERT INTO TB_Book (
  BookID,
  BookName
) SELECT
  BookID,
  BookName
FROM 
@DataTable";

conn.execute(sql, new { DataTable = dt.AsTableValuedParameter("DataTable") });
Run Code Online (Sandbox Code Playgroud)

执行时,会抛出以下异常:

列、参数或变量@DataTable。: 找不到数据类型DataTable

我如何改进我的代码以使其发挥作用?

.net dapper

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

如何在 dapper 扩展中使用 DESC 顺序根据 Order by 子句对数据进行排序?

我想按 DESC 顺序对数据进行排序。这是我的代码:

var predicate = Predicates.Sort<myPoco>(x => x.name, false);
var result = GetList<myPoco>(predicate).ToList();

protected IEnumerable<T> GetList<T>(object predicate, IList<ISort> sort = null, IDbTransaction transaction = null, int? commandTimeout = null, bool buffered = false) where T : class
{
    var result = connection.GetList<T>(predicate, sort, transaction, commandTimeout, buffered);
    return 
}
Run Code Online (Sandbox Code Playgroud)

使用 Dapper Extensions,我无法对数据进行排序。上面的代码抛出以下错误:

找不到属性名称...

我正在myPoco使用 Dapper Extension 的ClassMapper.

sorting c#-4.0 dapper dapper-extensions

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

Dapper 构建包含相同对象类型的对象树

我有一个表,表示类别之间可能的父子关系。根类别不会包含 ParentId 值,而是 null。我认为还需要指出的是,它应该构建 N 级深度。

例如,考虑以下 Sql 表。

类别: ID | 名称 | 父ID

其中 ParentId 是与同一个表的 Id 列的关系。

试图了解是否可以填充以下课程?

public class Category
{
    public string Id
    {
        get;
        set;
    }

    public string Name
    {
        get;
        set;
    }

    public List<Category> Categories
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

来自诸如以下的方法:

public List<Category> GetCategories()
{
        // construct using dapper.
}
Run Code Online (Sandbox Code Playgroud)

dapper

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

如何使用 Dapper 扩展谓词实现“IN”子句?

我想使用 Dapper Extensions Predicate 替换此查询?

SELECT * 
FROM SomeTable 
WHERE id IN (commaSeparatedListOfIDs)
Run Code Online (Sandbox Code Playgroud)

commaSeparatedListOfIDsIEnumerable一个Integer

到目前为止我已经尝试过:

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    var predicate = Predicates.Field<SomeTable>(f => f.Id, Operator.???, commaSeparatedListOfIDs);
    IEnumerable<SomeTable> list = cn.GetList<SomeTable>(predicate);
    cn.Close();
}
Run Code Online (Sandbox Code Playgroud)

我需要一个操作符Operator.In,但它在 Dapper Extensions 中不存在。

我应该如何使用 Dapper Extensions Predicate 系统实现“IN”子句?

c# dapper dapper-extensions

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

MySQL + Dapper 扩展:SQL 语法错误

我正在尝试使用 Dapper Extensions 进行 CRUD 操作。但是在将数据插入 MySQL 数据库时出现错误,如下所示:

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 [....] 行附近 [......] 使用的正确语法

如果我使用 MSSQL 数据库,Dapper Extensions 工作正常。为什么我在使用 MySQL 时出现此错误?

dapper dapper-extensions mysql-8.0

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

Dapper.Contrib:如何通过过滤 ID 以外的列来获取行?

我的班级如下:

[Table("tblUser")]
public class User
{
    [Key]
    public int Id { get; set; }
    public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用Dapper.Contrib,有没有办法通过而不是Id来获取User记录?Title

如果我像下面这样查询,它就有效。但是,我想过滤Title不是键的列。

await connection.GetAsync<User>(Id);
Run Code Online (Sandbox Code Playgroud)

dapper dapper-contrib

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

如何从使用 dapper 返回的复杂对象中修剪所有字符串

我正在使用旧数据库,在这个数据库中,数据被分配了列的最大长度。如果字符串数据较短,它会在末尾自动填充空格。

我想要做的是在我做的每个查询中修剪所有这些结尾的空格。

我认为更好的方法之一是使用反射为 dapper 查询制作扩展方法。

但我似乎无法让它工作。

父实体:

public class Person: BaseEntity
   {
       public Identification Identification { get; set; }
       public Address Address { get; set; }
       public Contact Contact { get; set; }
       public Family Family { get; set; }
       public ICollection<Payment> Payments { get; set; }
   }
Run Code Online (Sandbox Code Playgroud)

子实体示例:

 public class Address: BaseEntity
    {
        public string Street { get; set;  }
        public int Number { get; set; }
        public string BoxNumber { get; set; }
        public int ZipCode { get; …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection dapper

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

使用 dapper 提供多个参数?

我有这个代码:

public void SaveBoardgameCollection(BoardgameCollection boardgameCollection)
{
    if (boardgameCollection?.BoardgameUserStatusList.Count > 0)
    {
        using (IDbConnection connection = new SqlConnection(_databaseConnectionString.ConnectionString))
        {
            connection.Execute("dbo.BoardgameCollectionInsert @BoardGameComment, @Own, @ForTrade, @Want, @WantToPlay, @WantToBuy, @WishList, @Grade, @GameId, @PreOrdered, @PrevOwned", boardgameCollection.BoardgameUserStatusList);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

假设 SP 现在需要另一个 BoardgameUserStatusList 对象不包含的参数。我如何在同一个执行中提供它,例如用户 ID(GUID)?

编辑:

如果我这样做:

queryParameters = new DynamicParameters();
queryParameters.Add("@MyParameter1", boardgameCollection.BoardgameUserStatusList);
queryParameters.Add("@MyParameter2", System.Guid.NewGuid());
//@BoardGameComment, @Own, @ForTrade, @Want, @WantToPlay, @WantToBuy, @WishList, @Grade, @GameId, @PreOrdered, @PrevOwned
connection.Execute("dbo.BoardgameCollectionInsert ", queryParameters);
Run Code Online (Sandbox Code Playgroud)

我会得到一个 NotSupportedException,说明 BoardgameUserStatus(BoardgameUserStatusList 中的对象不能用作参数值?

c# sql-server dapper

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