sql-server - 如何在 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
。
解决方案
修改您的 select 语句,使其返回CreatedAt
列
select ... , created_at as [CreatedAt], ... from
或确保您的应用程序在应用程序启动时调用此行
Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;
推荐阅读
- c - 如何在 POSIX 正则表达式中写负前瞻
- mysql - 使用节点 js 连接到 My Sql 会引发错误“连接 ECONNREFUSED 127.0.0.1:3306”
- php - 在 php 中使用 str_shuffle 生成 4 位数的密码,但有时会得到 3 位数的数字
- php - 在我通过 php 获取当前页面的代码之前,如何加载并准备好 HTML 页面?
- typescript - 如何为 vue 插件添加类型?
- vba - Delete specific number of rows from WORD table
- docker - Docker Swarm 过滤器、约束和调度策略
- python - 如何根据属于另一个 2D 列表的 1D 元素对 2D 列表中的元素进行分组/组合?
- algorithm - 如何按其值对 ListNode(链接)进行排序?
- javascript - 如何修复 Javascript 中的下拉菜单?