2017-08-16 5 views
0

私はHttpPostメソッドをパラメータとして複雑なオブジェクトをパラメータとして取るAPIコントローラに持っています。この複合オブジェクトは、クラス 'Budget'(データベース内のマスターテーブル)のタイプのオブジェクトを持ち、 'BudgetDetail'クラスのリスト(マスタークラスの詳細)を持っています。Entity Frameworkと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であるということです。 マスターテーブル(Budget)に挿入して、そのテーブルのID(BudgetId)を取得して詳細テーブル(BudgetDetails)に挿入する方法

この

は、パラメータであるクラスです:

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を提供します。

関連する問題