我对 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。感谢您的建议。
我是 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) 我有一个充满数据的 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
我如何改进我的代码以使其发挥作用?
我想按 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.
我有一个表,表示类别之间可能的父子关系。根类别不会包含 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 Extensions Predicate 替换此查询?
SELECT *
FROM SomeTable
WHERE id IN (commaSeparatedListOfIDs)
Run Code Online (Sandbox Code Playgroud)
这commaSeparatedListOfIDs是IEnumerable一个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”子句?
我正在尝试使用 Dapper Extensions 进行 CRUD 操作。但是在将数据插入 MySQL 数据库时出现错误,如下所示:
错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 [....] 行附近 [......] 使用的正确语法
如果我使用 MSSQL 数据库,Dapper Extensions 工作正常。为什么我在使用 MySQL 时出现此错误?
我的班级如下:
[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 查询制作扩展方法。
但我似乎无法让它工作。
父实体:
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) 我有这个代码:
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 中的对象不能用作参数值?
dapper ×10
c# ×4
.net ×3
orm ×2
c#-4.0 ×1
frameworks ×1
mysql-8.0 ×1
reflection ×1
sorting ×1
sql-server ×1