我正在使用 ASP.NET 和 EntityFramework Core 和 DB Migrations 構建一個 Web API。在我的 Rental.cs 類中,我有一個屬性 Price 在資料庫中不可為空(因此使用 [Required])。在我從客戶端到服務器的 HTTP Post 請求中,我想發送一個租賃物件但沒有價格屬性(因為這應該在服務器上計算出來)。這不起作用,因為價格是 [Required]。
我希望在資料庫/模型中需要價格,但在從前端到后端的請求中不需要。我怎么能解決這個問題?我應該將它分成兩類(一類用于資料庫,一類用于發布請求)?
出租.cs
public class Rental
{
public int RentalId { get; set; }
[Required]
public double Price { get; set; }
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime OrderTime { get; set; }
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime Expires { get; set; }
...
租賃控制器.cs
[HttpPost]
public async Task<ActionResult<Rental>> PostNewRental([FromBody] Rental rental)
{
// Want to change the Price attribute here by fetching from somewhere else.
var res = await _rentalService.AddNewRental(rental);
return Ok(res);
}
uj5u.com熱心網友回復:
理想情況下,您應該為 DTO(用于控制器操作的型別)和案例中的模型或物體(用于 EF 的型別)使用單獨的型別。
例如,你的 DTO 應該是
public class RentalDto
{
public int RentalId { get; set; }
public DateTime OrderTime { get; set; }
public DateTime Expires { get; set; }
}
你的物體模型應該是
public class Rental
{
public int RentalId { get; set; }
[Required]
public double Price { get; set; }
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime OrderTime { get; set; }
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime Expires { get; set; }
}
然后,您可以使用 AutoMapper 之類的庫將 dto 值復制到物體中。
有關更多詳細資訊,請閱讀 DTO 與模型
這也可能有幫助
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/395006.html
標籤:C# 网站 asp.net-web-api 实体框架核心 网络接口
上一篇:API-對外部物件進行排序
