2011-10-17 2 views
0

ASP.Net MVC 3 및 ​​Entity Framework 4를 사용하는 클라이언트 용 시스템을 개발했습니다.이 시스템은 클라이언트가 장비를 기록하고 모니터링 할 수있는 작은 응용 프로그램입니다. 즉, PC와 같은 장비를 추가 할 수 있습니다 자산 번호, 가격, Warrenty Expires 등을 기록하고 카테고리 (예 : PC 시스템, 프린터, 스피커 등)에 할당하고 장비 위치 (즉, Main Office, Store Room, 2nd Building)를 기록하십시오. 그러나이 모든 것이 잘 작동하지만 최근에는 클라이언트가 시스템에 일부 보고서를 빌드하도록 요청했습니다.Entity Framework 또는 Enterprise 라이브러리를 사용하여 사용자 지정 보고서를 만드시겠습니까?

일부 보고서는 장비 자산 번호로 검색 한 다음 그와 관련된 모든 추가 정보를 반환하는 것과 같이 간단합니다. 그러나 필요한 보고서가 하나 있습니다. 보고서 상단의 모든 위치를 나열한 다음 그리드/조회 테이블과 마찬가지로 보고서의 왼쪽에 모든 범주를 나열하는 것입니다. 그러면 두 번째 건물의 총 PC 시스템 수, 매장의 총 스피커 수 등과 같이 각 위치의 장비 카테고리의 총 수를 표시합니다.

내가 잘못 생각할 수도 있지만 생각했습니다. 이것은 Entity Framework가 설계된 것이 아니라 계산을 표시하는 데이터 집합이 아니라 개체를 반환한다는 것을 의미합니다. 그러므로, 나는 이것을하기위한 최선의 방법이 무엇인지 궁금해하고 있었다.

아마도 Microsoft 엔터프라이즈 라이브러리 및 저장 프로 시저를 사용하여 결과의 ​​데이터 집합을 반환 할 생각 이었지만, 이것이 잘못된 접근 일 수 있습니까?

다시 한 번 의견을 보내 주시면 감사하겠습니다. 요청이 다소 혼란스러운 경우 사과드립니다.

감사합니다.

답변

1

고객이 표시하고자하는 것은 피봇 테이블입니다. 여기에 대한 답변을보십시오 : Pivot table in c# entity framework. N 테이블 EquipmentAtLocation 및 LocationId 및 EquipmentId으로 제공되는 셀에 Quantity를 작성 : 다음과 같은 기관이있는 경우

는 그러나

public class Location { 
    public int LocationId { get; set; } // PK 
} 
public class Equipment { 
    public int EquipmentId { get; set; } // PK 
} 
public class EquipmentAtLocation { 
    public int LocationId { get; set; } // PK/FK 
    public int EquipmentId { get; set; } // PK/FK 
    public int Quantity { get; set; } 
} 

다음이 테이블을 구축

은 m 반복보다는 다른 아무것도 아니다. 해당 테이블에 해당 PK가 없으면 먼저 해당 테이블에서 LocationId 및 EquipmentId를 사용하여 그룹화해야합니다.

var locations = ctx.Locations.Select((val, idx) => new { val.LocationId, idx }).ToDictionary(x => x.LocationId, y => y.idx); // get a map of location to index 
var equipments = ctx.Equipments.Select((val, idx) => new { val.EquipmentId, idx }).ToDictionary(x => x.EquipmentId, y => y.idx); // get a map of equipment to index 

int[,] pivot = new int[locations.Count, equipments.Count]; 
foreach (var entry in ctx.EquipmentAtLocations) { 
    pivot[locations[entry.LocationId], equipments[entry.EquipmentId]] += entry.Quantity; 
} 

데이터 계약 시리얼 라이저는 다차원 배열을 직렬화 할 수있는 경우 나도 몰라, 그렇지 않으면 당신은 가변 배열을 사용해야합니다. 물론 객체에이를 압축해야하며, 인덱스 정보가 무엇인지 알 수 있도록 헤더 정보 (값순으로 정렬 된 키)를 포함해야합니다.

+0

그레이트 돈. 감사. – tgriffiths

1

MVC 3으로 태그를 지정 했으므로 카테고리를 선택하기위한 웹 인터페이스를 찾고 있습니까? 결과가 표시됩니까? 그렇다면 반드시 Entity Framework를 사용할 수 있습니다. 컨트롤러의 메소드에 대한 Ajax 요청을 사용하여 그 데이터로 뷰를 리턴하면됩니다.

절차가 필요하지 않습니다.이 작업은 엔티티 프레임 워크에서 모두 수행 할 수 있습니다. 왼편은 엔티티 A입니다. 하나를 클릭하면/Category/Index/5에 대한 아약스 요청이 수행됩니다. 예를 들어, 단순히 결과를 렌더링합니다.

+0

감사합니다. – tgriffiths

관련 문제