2017-08-16 50 views
0

我有一个HttpPost方法进入一个API控制器,它将一个复杂对象作为参数。这个复杂的对象具有类'预算'(即数据库中的主表)类型的对象,并且它具有'BudgetDetail'列表(这是主类的详细信息)。将记录插入到具有与实体框架和MVC的主/明细关系的表中

我需要插入的“预算”在主表类的对象,然后插入详细信息表中

这是API控制器的HttpPost方法“BudgetDetail”类的列表:

[HttpPost] 
public IHttpActionResult CreateBudget(NewBudget newBudget) 
{ 
    var budget = new Budget 
    { 
     DateOfIssue = newBudget.Budget.DateOfIssue, 
     VehicleId = newBudget.Budget.VehicleId, 
     BudgetAccepted = newBudget.Budget.BudgetAccepted 
    }; 

    _context.Budgets.Add(budget); 

    foreach (var detail in newBudget.BudgetDetails) 
    { 
     var detailBudget = new BudgetDetail 
     { 
      //BudgetId = Here i need to get id of the Budget table that i inserted before 
      ProductId = detail.ProductId, 
      Price = detail.Price, 
      Quantity = detail.Quantity, 
      Iva = detail.Iva, 
      Total = detail.Total 
     }; 
     _context.BudgetDetails.Add(detailBudget); 
    } 
    _context.SaveChanges(); 
    return Ok(); 
} 

我在这里的问题是,当我尝试插入'BudgetDetails'表中主表的BudgetId的值为null。 我如何插入主表(预算),并获得该表(BudgetId)插入细节表(BudgetDetails)的ID。

这是对参数的类:

public class NewBudget 
{ 
    public Budget Budget{ get; set; } 
    public List<BudgetDetail> BudgetDetails{ get; set; } 
} 

这是我的预算级(主表):

public class Budget 
{ 
    public int Id { get; set; } 
    public DateTime DateOfIssue { get; set; } 
    public int VehicleId { get; set; } 
    public bool BudgetAccepted { get; set; } 
} 

这是我BudgetDetail类(详细信息表):

public class BudgetDetail 
{ 
    public int Id { get; set; } 
    public int BudgetId { get; set; } 
    public int ProductId { get; set; } 
    public byte Quantity { get; set; } 
    public int Price { get; set; } 
    public int Iva { get; set; } 
    public int Total { get; set; } 
} 

我会非常感谢您给我的任何建议。

+0

如果你在'context.Budgets.Add(budget)'之后调用'.SaveChanges()',那么'budget.Id'将包含更新值 –

回答

1

CreateBudget方法中,更改结束。例如:

context.BudgetDetails.Add(detailBudget); 
} 
_context.SaveChanges(); 
return detailBudget.Id; 

它给你从EF创建的detailBudget id。