首页 > 解决方案 > 如何在 Dapper 中获取正确的 DateTime

问题描述

我正在使用 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;
}

这是User通过 id 获取的方法:

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

标签: sql-serverasp.net-core.net-coredapper

解决方案


修改您的 select 语句,使其返回CreatedAt

select ... , created_at as [CreatedAt], ... from

或确保您的应用程序在应用程序启动时调用此行

Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;

推荐阅读