【问题标题】:ASP.NET Core 3.0 MVC update model with list objects - add objectASP.NET Core 3.0 MVC 更新模型与列表对象 - 添加对象
【发布时间】:2021-03-25 10:57:47
【问题描述】:

我有以下课程:

public class Invoice
{    
     [key]
     public Guid InvoiceID { get; set; }
     public string Name { get; set; }
     public List<Invoice_item> Invoice_items { get; set; }
     
     public Invoice()
     {
         InvoiceID = Guid.NewGuid();
         Invoice_items = new List<Invoice_item>();
     }
} 

和:

public class Invoice_item
{
     [Key]
     public Guid Invoice_itemID { get; set; }
     public string Description{ get; set; }
     public int Price { get; set; }
     public int qty { get; set; }
     
     public Invoice_item()
     {
            Invoice_itemID = Guid.NewGuid();
     }
}

它工作正常。我可以编辑这个模型。 控制器:...

Invoice invoice = await _context.Invoice.Include(i => i.Invoice_items).Where(x => x.InvoiceID == id).FirstOrDefaultAsync();

invoice.Name = "2020/122";
invoice.Invoice_items[0].Description = "Some name";
invoice.Invoice_items[0].Price = 1;
invoice.Invoice_items[0].qty = 1;

_context.Update(invoice);
await _context.SaveChangesAsync();

// WORK OK

但问题是当我想向列表中添加一个项目时: 控制器:...

Invoice invoice = await _context.Invoice.Include(i => i.Invoice_items).Where(x => x.InvoiceID == id).FirstOrDefaultAsync();

invoice.Name = "2020/122";
invoice.Invoice_items[0].Description = "Description 1";
invoice.Invoice_items[0].Price = 1;
invoice.Invoice_items[0].qty 1;

Invoice_item item = new Invoice_item()
{
  Description = "Description 2",
  Price = 2,
  qty = 2
};

invoice.Invoice_items.Add(item);   // PROBLEM
                       
_context.Update(invoice);
await _context.SaveChangesAsync();

编辑“发票”记录时,可以编辑该记录的所有元素以及附加到它的“Invoice_item”列表的元素。当我想将一个项目添加到附加到“发票”记录的“发票项目”列表中时,就会出现问题。

请帮忙。

【问题讨论】:

  • 你得到的错误是什么?您能提供有关例外情况的任何详细信息吗?
  • DbUpdateConcurrencyException:数据库操作预计会影响 1 行,但实际上影响了 0 行
  • 这个问题是关于ChangeTracker的,你可以在entityframeworktutorial.net/efcore/…链接上阅读
  • 您的Invoice_item 实体是否设置了主键?
  • 是的。 Guid Invoice_itemID 是 Key

标签: c# asp.net asp.net-mvc asp.net-core-mvc asp.net-core-3.0


【解决方案1】:

您只需在您的item 中添加一个Invoice_itemID,如下更改您的代码。

Invoice_item item = new Invoice_item()
        {
            //add this line.
            Invoice_itemID = new Guid(),
            Description = "Description 2",
            Price = 2,
            qty = 2
        };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多