如何使用 Web API 将数组从 SQL 服务器数据库传递?

How to pass an array from to SQL Server database using Web API?

我试图将我的数组传递给 SQL 服务器,但我只能得到一个 NULL 值,如果我试图添加一个 table 行并传递它,我只会收到数据库中有 1 行。

Here is the console log when I pass the array to SQL

这是我 post 我的数组 SQL:

postButton(data) {
    return this.http.post(environment.baseURL + 'PropertyTransactionDetails/Add', data)
}

这是我的模型:

public class PropertyTransactionDetailsDTO
{
    public int Id { get; set; }
    public string PropertyNumber  { get; set; }
    public string PropertyDescription  { get; set; }
    public string DeliveryReceiptNumber  { get; set; }
}

这是我的存储库:

public async Task<PropertyTransactionDetailsDTO> Insert(PropertyTransactionDetailsDTO item)
{
    PROPERTYTRANSACTIONDETAILS data = MapToEntity(item);
    _ctx.Entry(data).State = EntityState.Added;
    await _ctx.SaveChangesAsync();
    return item;
}

还有我的控制器:

[HttpPost("Add")]
public async Task<ActionResult<PropertyTransactionDetailsDTO>> Add([FromBody] PropertyTransactionDetailsDTO item)
{
    if (item == null)
        item = new PropertyTransactionDetailsDTO();

    return Ok(await _PropertyTransactionDetailsRepository.Insert(item));
}

This is what I get

从您共享的代码来看,您正在向后端发送一个数组,但后端需要一个对象。

从前端解决这个问题的一种方法是(假设数据确实是一个数组,并且您正在订阅 pushButton 的结果):

function pushButton(data){
  let tasks: Observable<any>[] = [];
  data.ItemRec.forEach((item, index) => {
       tasks.push(this.http.post(environment.baseURL + 'PropertyTransactionDetails/Add', item))
  });
  return concat(...tasks)    
}

如果您在 Angular 项目中定义了类型,那么您可以将任何类型更改为该类型。

希望对您有所帮助。

最小工作示例:https://stackblitz.com/edit/typescript-dspi9k?file=index.ts

根据讨论,向前迈出的最小一步是将 onSave() 函数更改为:

onSave(){ 
  console.log("onSave():",this.receivedPropertyForm.value);
  this.receivedPropertyForm.value.ItemRec.forEach(prop=>{
    this.micro.pushButton(prop).subscribe({next:(res)=>{console.log("After storing record:",res) } })
  });
}

在值 属性 中,您有一个 ItemRec 数组。使用 forEach() 您将寻址该数组中的每个 属性 并将其发送到数据库。请注意,这不是所需的最终状态,但它会起作用。看看 RxJS:https://rxjs.dev/guide/overview