1

VS2013 및 EF6을 사용하여 셸 웹 응용 프로그램을 만든 기존 데이터베이스가 있지만 몇 가지 문제가 있습니다.ASP MVC 5 EF 6 - 여러 테이블에 삽입

내 데이터베이스는 예를 들어, 다음과 같은 테이블이 다음 EF는 새로운 고객을 만들기 위해, 예를 들어, 나에게 다음과 같은 방법을 준 (굉장이있는) 나를 위해 쉘 웹 애플리케이션을 생성

Table: Customer (Id, First, Last, Date) 
Table: Assets (Id, CustID) 
Table: Orders (Id, AssetId, CustID) 

: 내 데이터베이스에서

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create([Bind(Include="Id, First, Last, Date")] Customer customer) 
.... 
return View(customer) 

나는 고객 많은 주문 및 자산을 가지고 있지만, 나는 만들기 작업 중에이 관계를 사용하는 방법을 이해하지 않습니다 , 또는 다른 어떤.

내 질문 -이 작업은 여러 테이블에 걸쳐해야 할 때 어떻게 새로운 고객을 "만들기"합니까? 예를 들어 '고객 만들기'양식을 작성하면 자산 및/또는 주문을 하나 이상 추가하십시오.

저장 프로 시저를 사용하여 세 개의 다른 테이블에서 여러 삽입을 수행해야합니까? 또는 모든 EF 마법을 사용할 수 있도록 데이터베이스를 변경할 수 있습니까?

도움 주셔서 감사합니다.

+0

내가 실제로 여기에서 묻는 것은 단일 양식 내에서 여러 클래스를 사용하는 방법이라고 생각하십니까? – syllogistic

+0

컨트롤러가 도메인 모델을 사용하는 것처럼 들리지만, 대신보기 모델을 사용하고 싶은 도메인 모델을 사용하고 있습니다. 그런 다음 게시 작업에서 도메인 모델에보기 모델을 매핑합니다. –

답변

2

세 가지 클래스를 모두 포함하는보기 모델을 사용할 수 있습니다.

public class CreateCustomerViewModel 
{ 
    public Customer Customer { get; set; } 
    public ICollection<Asset> Assets { get; set; } 
    public ICollection<Order> Orders { get; set; } 
} 

귀하의 [HttpGet] 액션 메소드 대신 Customer의 모델로이보기 모델을 전달합니다.

[HttpGet] 
public ActionResult Create() 
{ 
    CreateCustomerViewModel model = new CreateCustomerViewModel(); 
    return View(model); 
} 

귀하의 [HttpPost] 액션 메소드는 매개 변수로 CreateCustomerViewModel를 취할 것입니다 :

[HttpPost] 
public ActionResult Create(CreateCustomerViewModel model) 
{ 
    // Create the Customer with the necessary Assets and Orders and save 
} 

당신이 수업을하고있어 관계가 제대로 구성되어있는 경우, Customer의 탐색 속성에 적절한 자산 및 주문 추가 엔티티는 Customer을 삽입 할 때 자산 및 주문을 적절한 테이블에 자동으로 삽입하도록 EF를 트리거해야합니다.

+0

매우 도움이됩니다, 감사합니다! – syllogistic