c# - 如何将我从数据库中获得的实体绑定到我的请求的 DTO?
问题描述
我有一个 DTO(数据传输对象)类。也许这个类的名称不正确,但我通常将其称为请求模型或 DTO,并将数据从我的 JSON 请求映射到该类。我给你举个例子:
public class SaveRequest
{
[JsonProperty("category_id")]
[Required(ErrorMessage = "You have to choice category!!!")]
public Category Category { get; set; }
[JsonProperty("title")]
[Required(ErrorMessage = "You have to type title!!!")]
public string Title { get; set; }
}
如您所见,我在这里有两个属性。一个 - 很简单Title
- 只是一个字符串,但第二个 - 是我的数据库实体。对于这个项目,我使用 Entity Framework Core 和 .NET Core MVC 2.2。我将向您展示我的数据库上下文:
public class ApplicationDbContext : IdentityDbContext
{
private readonly string _connectionString;
public DbSet<Category> Category { get; set; }
public DbSet<Application> Applications {get; set;}
... more props here ...
和类别模型的代码:
public class Category
{
public int CategoryId { get; set; }
public string Name { get; set; }
public DateTime CreatedAt { get; set; }
public List<Application> Applications { get; set; }
public Category()
{
CreatedAt = DateTime.UtcNow;
}
}
在控制器中,我有以下方法:
public IActionResult Save([FromBody] SaveRequest request) {...}
如您所见,我在这里尝试捕捉SaveRequest
模型。
所以,现在你知道我的代码了。这是关于我的问题。我发送以下 JSON:
{
"title": "Hello!! How are you!!!",
"category_id": 777
}
我想将category_id
请求参数绑定到真正的Category
EF 实体。我的意思是,让 EF 框架用给定的 id 找到我Category
,然后将其绑定到Category
DTO 类中的属性。如果Category
具有给定 id 的实体不存在,则将新的模型错误添加到模型状态(以向客户端显示它)。如果存在,我希望将其绑定到我的 DTO。我已阅读此文档并看到了一些关于的内容[BindProperty]
,但我不明白它是否适合我的问题。
解决方案
实体框架无法自动执行此操作,我认为您可以构建自定义模型绑定器
但是,您可以在控制器中执行此操作
在 DTO
public class SaveRequest
{
[JsonProperty("category_id")]
[Required(ErrorMessage = "You have to choise category!!!")]
public int Category_ID { get; set; }
[JsonProperty("title")]
[Required(ErrorMessage = "You have to type title!!!")]
public string Title { get; set; }
}
在你的控制器中
public IActionResult Save([FromBody] SaveRequest request) {
var category = context.categories.where(c => c.id == request.Category_id).FirstOrDefaults();
if(category == null)
return NotFound();
...
}
推荐阅读
- ios - iOS中加密-发送-保存-接收文件
- knockout.js - 删除下拉列表淘汰js中的选项
- jquery - 强制 Angular 6 从不重用组件
- sql-server - 使用链接服务器从视图中插入表
- r - 使用downloadHandler根据上传的数据编辑现有的excel文件?
- python - Pyspark:在UDF中传递多列以及参数
- java - spring data couchbase保存实体不返回id
- angular - Angular 6 z-index 和动画问题
- javascript - 在 VSCode 中自动将逗号添加到 JavaScript 对象的末尾
- c# - 添加 SourceLink nuget 包会导致构建错误