如何在 Dapper 中获取正确的 DateTime
Posted
技术标签:
【中文标题】如何在 Dapper 中获取正确的 DateTime【英文标题】:How to get correct DateTime in Dapper 【发布时间】:2021-11-24 23:57:24 【问题描述】:我正在使用 Dapper 通过 SQL Server 处理 ASP.NET Core 中的用户。
除了DateTime
之外,一切正常。
正确的DateTime
存储在数据库中 (04.10.2021 16:11:45),但是从数据库中检索它会返回默认日期时间 (0001-01-01T00:00:00)。
这是User
模型类:
public class User
public DateTime CreatedAt get; set;
并且我在User
存储库中使用此方法将User
添加到数据库中:
public async Task<int> AddAsync(User entity)
entity.CreatedAt = DateTime.Now;
string sql = "insert into users (id, username, email, password, created_at) values (@Id, @Username, @Email, @Password, @CreatedAt)";
using var connection = new SqlConnection(_configuration.GetConnectionString("Default"));
connection.Open();
var result = await connection.ExecuteAsync(sql, entity);
return result;
这是通过 id 获取User
的方法:
public async Task<User> GetByIdAsync(string id)
string sql = "select * from users where id = @Id";
using var connection = new SqlConnection(_configuration.GetConnectionString("Default"));
connection.Open();
var result = await connection.QuerySingleOrDefaultAsync<User>(sql, new Id = id );
return result;
User
数据在控制器中获取:
[HttpGet("id")]
public async Task<IActionResult> GetById(string id)
var data = await _unitOfWork.Users.GetByIdAsync(id);
if (data == null)
return Ok();
return Ok(data);
表格的列类型为DATETIME
。
【问题讨论】:
你能显示你获取它的行吗?即既然你说问题发生在读取而不是写入,我们可以看到读取吗?也:也许select ... , created_at as [CreatedAt], ... from ...
@MarcGravell 我已经编辑了显示获取数据的控制器的问题。
请提供您用于此操作的GetByIdAsync
方法或select
语句中的代码
@Alexander 我已经添加了上面的方法
@TommyTheReal Just select ... , created_at as [CreatedAt], ... from
正如 Marc Gravell 在他的评论中所描述的那样
【参考方案1】:
修改您的 select 语句,使其返回 CreatedAt
列
select ... , created_at as [CreatedAt], ... from
或确保您的应用程序在应用程序启动时调用此行
Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;
【讨论】:
以上是关于如何在 Dapper 中获取正确的 DateTime的主要内容,如果未能解决你的问题,请参考以下文章
问: (VFP)在下列有关日期时间型表达式中,语法上不正确的是____. A.DATETIM()-
DB2 - 使用带有字符串数组参数的 Dapper 选择查询将不会返回正确的结果
使用Dapper时,如何将MySqlParameters[] 变成Dapper.DynamicParameters动态对象