[英]How to save Data in Related Models in Asp.net core web API using EF core?
我在将数据保存到相关 model 中时遇到问题 asp.net 核心 web ZDB974238714CA8DE634A7A7CED 和 D08DE634A7ACED 核心我有一个产品model和类别model,一个类别可以有很多产品但一个产品只能属于一个类别
public class Product
{
[Key]
[Required]
public int ProductId { get; set; }
[Required]
public string Title { get; set; }
[Required]
public Double Price { get; set; }
[Required]
public Category Category { get; set; }
[Required]
public string Desc { get; set; }
[Required]
public string Absolute_Url { get; set; }
[Required]
public DateTime PostDate { get; set; }
}
public class Category
{
[Key]
[Required]
public int CategoryId { get; set; }
[Required]
public string? Name { get; set; }
}
我有一个产品 DTO model
public class ProductDTO
{
[Required]
public string Title { get; set; }
[Required]
public Double Price { get; set; }
[Required]
public int CategoryId { get; set; }
[Required]
public string Desc { get; set; }
}
我的逻辑是,当我使用 Product DTO model 发布数据时,我使用发布的 CategoryId 来获取类别,然后在保存之前更新 Product Model。 我保存后,产品model中的Category为null,如下图。
[
{
"productId": 3,
"title": "Swagger Test",
"price": 20,
"category": null,
"desc": "Swagger Test",
"absolute_Url": "Christian/Swagger Test",
"postDate": "2022-07-15T13:18:42.0060792"
}
]
这是我的 controller 方法
[HttpPost("Create")]
public async Task<ActionResult> Create([FromBody] ProductDTO productDTO)
{
if (productDTO == null)
{
return BadRequest();
}
if (!ModelState.IsValid)
{
return BadRequest();
}
try
{
//get product category
var category = await _uow.Category.FindById(productDTO.CategoryId);
if(category == null)
{
return BadRequest();
}
var product = _mapper.Map<Product>(productDTO);
product.Category = category;
product.PostDate = DateTime.Now;
product.Absolute_Url = $"{category.Name}/{product.Title}";
_uow.Product.Create(product);
await _uow.Save();
return Ok();
}
catch (Exception)
{
return BadRequest();
}
}
请帮助
因此,如果我正确理解了这个问题,您可以执行以下操作:
public class Product
{
[Key]
[Required]
public int ProductId { get; set; }
[Required]
public string Title { get; set; }
[Required]
public Double Price { get; set; }
[Required]
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
[Required]
public string Desc { get; set; }
[Required]
public string Absolute_Url { get; set; }
[Required]
public DateTime PostDate { get; set; }
}
所以请注意我刚刚添加了类别 ID,然后将虚拟添加到您的类别实体中。 因此,根据我的经验,EF Core 现在知道将您的类别 ID 与您的类别实体相关联。 因此无需在类别数据库中搜索该 ID,只需使用类别 ID 保存您的产品。
当您现在将该实体从数据库中拉出时,如果您告诉您 Response DTO 包含 CategoryDTO public CategoryDto Category { get; set; }
,它将与它一起拉出类别实体。 public CategoryDto Category { get; set; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.