2 개의 먼 관련 도메인 모델을 운이없는 하나의 뷰 모델로 결합하는 방법을 찾고 있습니다.MVC 멀리 떨어져있는 여러 도메인 모델에서 뷰 모델 만들기
기존 응용 프로그램에서 작업 중이며 팩스 로그 검색 결과에 필드를 추가해야합니다. 컨트롤러가 viewModel을 반환하고 있는데, 추가 필드를 추가하려고합니다. 어떤 소리가 들리겠습니까?
배경 정보 :
이 원래 뷰 모델입니다 :
public string CustomerName { get; set; }
방법을 응용 프로그램입니다 :
public class VOEIFaxLogSearchListViewModel
{
public DateTime DateTimeAdded { get; set; }
public string Processor { get; set; }
public string FaxStatusCode { get; set; }
public string VendorOrderID { get; set; }
public string FromFaxNumber { get; set; }
}
내가이 뷰 모델에 추가 필드를 추가 할 설계된 경우 저장 프로 시저가 호출되어 검색 결과의 데이터 집합을 반환합니다. 생성 된 데이터 세트는 다음의 DataTable로 변환된다
var resultFaxDS = vOEIDAO.GetFaxLogSearchResult(startDate,endDate,userName,faxType);
(I는 필요한 검색 방법 (GetFaxLogSearchResult) 또는 SQL 콜 아니다되지 않으므로).
DataTable faxTable = resultFaxDS.Tables[0];
For 루프는 각 결과 레코드를 중개하여 FaxModel이라는 도메인 모델에 넣습니다. 어느 것이 자동 매핑으로 FaxLogSearchListViewModel이라는 viewModel에 매핑됩니다.
1) 뷰 모델에 새로운 속성을 추가 : 여기
for (int i=0; i<faxTable.Rows.Count;i++)
{
var row = faxTable.Rows[i];
var faxLogModel = vOEIDAO.DRToFaxModel(row);
faxViewModel.Add(Mapper.Map<FaxModel,FaxLogSearchListViewModel>(faxLogModel));
}
}
return faxViewModel;
}
내가이 결과 필드를 추가하는 지금까지 한 일이다.
가 세트에서 CUSTOMERNAME를 반환하도록 검색 결과를 다시 끌어 2) 개질 된 프로 시저
이 딜레마 :
도메인 모델에 데이터 세트의 각 행을 첨가하는 방법 (DRToFaxModel) 도메인 모델 (FaxModel)을 채우고 있습니다. 추가하려는 필드가 도메인 모델에 없습니다. 결과적으로 구체적인 클래스에 속하지 않는 도메인 모델에 필드를 추가하고 싶지 않습니다.
public class FaxModel
{
public int FaxID { get; set; }
public int FaxStatusID { get; set; }
public string ToFaxNumber { get; set; }
public string FromFaxNumber { get; set; }
public DateTime DateTimeAdded { get; set; }
public string FaxStatusCode { get; set; }
public string Processor { get; set; }
public string VendorOrderID { get; set; }
}
public FaxModel DRToFaxModel(DataRow dr)
{
FaxModel voObj = new FaxModel();
voObj.FaxID = GetVOInt(dr["FaxID"]);
voObj.FaxStatusID = GetVOSmallInt(dr["FaxStatusID"]);
voObj.ToFaxNumber = GetVOStr(dr["ToFaxNumber"]);
voObj.FromFaxNumber = GetVOStr(dr["FromFaxNumber"]);
voObj.DateTimeAdded = GetVODateTime(dr["DateTimeAdded"]);
voObj.FaxStatusCode = GetVOStr(dr["FaxStatusCode"]);
voObj.Processor = GetVOStr(dr["Processor"]);
voObj.VendorOrderID = GetVOStr(dr["VendorOrderID"]);
//Cant add CustomerName to the model without modifying the FaxModel domain model.
//Shouldn't do that because it is a domain model.
//CustomerName is in the CustomerModel domain Model
// voObj.CustomerName = GetVOStr(dr["CustomerName"]);
return voObj;
}
그래서 현재, 추가 CUSTOMERNAME 속성 내 뷰 모델이 CUSTOMERNAME에 대한 널 (null)로 반환됩니다 여기
도메인 모델과 검색 결과에서 각 행과 이식에 사용 된 방법이다.
내 도메인 모델은 서로 관련이 있습니다. 데이터베이스에서 FAX 테이블은 ORDER 테이블을 통해서만 연결하여 CUSTOMER 테이블에 조인 할 수 있습니다. FAX 테이블에 orderID 필드가 있고 ORDER 테이블에 CustomerID 필드가 있습니다.
내 질문은 다음과 같습니다. 어떻게 2 도메인이 없기 때문에 autoMapper를 사용하여 팩스 도메인 모델을 고객 도메인 모델에 매핑합니까? 다른 테이블을 통해 합류하지 않고 관계를 구축하기위한 공통 필드가 있습니까?
또는 automapper를 사용하여 2 개 이상의 테이블을 하나의 viewModel에 매핑 할 수 있습니까? 어떻게 된거 야?