如何在 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.Contrib - 如何获取更改跟踪值?

如何使用 Dapper 实现工作单元模式?

使用Dapper时,如何将MySqlParameters[] 变成Dapper.DynamicParameters动态对象

将 BeginTransaction 与 Dapper.IDbConnection 一起使用的正确方法