c# - Dapper insert:用于插入的扁平化类
问题描述
我有一个带有嵌入式子类的类,例如
public class Parent
{
public int Id { get; set; }
public string Name { get;set;}
public ValidFor ValidFor { get; set; }
}
public class ValidFor
{
public DateTime? StartDateTime { get;set;}
public DateTime? EndDateTime { get; set; }
}
但是在使用 Dapper 插入时,我想展平 ValidFor,以便我只插入一个“父”表。我的插入代码和 SQL 如下
public async Task<Category> Create(Category entity)
{
string sql = "Insert into Parent (Id, Name, StartDateTime, EndDateTime) values (@Id, @Name, @StartDateTime, @EndDateTime)";
using (var connection = GetConnection)
{
await connection.ExecuteAsync(sql, entity);
return entity;
}
}
但我得到了错误
“开始日期时间”不存在
我明白为什么,但是如何将我的对象映射到我的表?我可以在网上找到有关 Multi-Mapping 的示例都集中在多个表上。
我当然可以创建一个不同的类,它是平面的并且与我的表结构匹配,然后在它们之间进行映射(使用 Mapster/Automapper 等),但是由于我有 10 多个类有这个问题,所以这并不实际。
解决方案
我认为您的架构存在严重问题,但无论如何:
最简单的解决方法是在匿名对象中手动指定参数。
public async Task<Category> Create(Category entity)
{
string sql = "Insert into Parent (Id, Name, StartDateTime, EndDateTime) values (@Id, @Name, @StartDateTime, @EndDateTime)";
using (var connection = GetConnection)
{
await connection.ExecuteAsync(sql, new
{
entity.Id,
entity.Name,
entity.ValidFor.StartDateTime,
entity.ValidFor.EndDateTime,
});
return entity;
}
}
推荐阅读
- axios - axios:是否可以不从链接中硬编码 HTTPS 协议
- javascript - 如何在单个 html 页面上添加反应
- python - Python - 如何解析 xml 响应并将元素值存储在变量中?
- laravel - Laravel 不会在刷新时在“迁移”表中创建记录
- android - 如何定义导航操作的默认动画?
- meteor - Meteor 升级到 1.6.1.1 会生成 MaxListenersExceededWarning
- angular - Angular中的多个模板引用变量
- swift - 你如何在 Swift 中获得网站的平均背景颜色?
- ios - 如何在表格视图单元格中重复图像?只有 5 个图像我只想重复图像,它应该只包含 100 行
- python - 如何使用 Beautifulsoup 获取所选节点的文本