2012-06-12 2 views
0

내 응용 프로그램은 asp.net 4, C# 및 Entity Framework를 사용합니다. 내 데이터베이스 Companies 많은 Locations, 차례로 많은 Devices있는 테이블이 포함되어 있습니다. Company은 내가 표시 한 CompanyLocationsDevices을 편집 그리드 뷰를 사용합니다.Entity Framework를 사용하여 제한된 테이블의 열로 필터링

현재 로그온되어있는 aspnet_user에 키가 있습니다. 그들이 Company에 대한 직접 링크를 가지고이 쉽게

LocationListEntityDataSource.AutoGenerateWhereClause = true; 
LocationListEntityDataSource.WhereParameters.Clear(); 
LocationListEntityDataSource.WhereParameters.Add("CompanyGuid", System.Data.DbType.Guid, Tools.Tools.getCompanyGuidString()); 

그러나 나는 그들이 단지 Location에 대한 링크를 가지고 Company하여 Devices을 필터링하는 방법을 작동하지 않을 수 있습니다 ... Locations 달성된다. 이 달성 할 수있는 방법에

DeviceListEntityDataSource.AutoGenerateWhereClause = true; 
DeviceListEntityDataSource.WhereParameters.Clear(); 
DeviceListEntityDataSource.WhereParameters.Add("Location.CompanyGuid", System.Data.DbType.Guid, Tools.Tools.getCompanyGuidString()); 

어떤 아이디어 ... 나는 다음과 유사한 것을 사용하는 희망을 가지고,하지만 난 Location.CompanyGuid을 찾을 수 없다는 예외가?

+0

이 엔티티 프레임 워크 질문과 모델링/스키마 질문에 대한 설명이 적습니다. 태그를 다시 지정 (예 : [tag : asp.net]을 제거하고 [tag : database-schema]를 추가)하고 현재 스키마와 엔티티의 다이어그램을 추가해야합니다. –

+0

모델의 대부분 또는 최소 버전을 설명 할 수 있습니까? 귀하의 경우 왜 회사는 위치뿐만 아니라 디바이스와도 일대 다 많은 관계가 있습니다. 장치를 추가하는 것처럼 먼저 위치를 만듭니다. 그런 다음'location.Devices.Add (device'). 그리고 나서'dbconext.Companies.Add (location); –

+0

"Company는 Locations와 Devices와 일대일로 많은 관계가 있습니다."- 나는 장치와 위치를 의미한다고 가정합니다. 나는 이것을 고려해 보았지만, 위치에 연결되어있는 다른 테이블도 많이있다. 공간을 절약하기 위해 나는 회사가 많은 수의 테이블을 회사에 연결하는 것을 피하고자했다. 회사가 위치에서 추정 할 수 있다고 가정했을 때 – user1374841

답변

0

회사는 위치 및 기기와 일대일 관계를 맺을 것을 고려하십시오.

ICollection<Device> Devices;의 가상 속성을 Company class에 넣을 때. 이것은 단지 탐색 속성 일뿐입니다. 이렇게하면 장치에 대한 회사 테이블의 열이 만들어지지 않습니다. 그러면 가상 모델 comapany와 FK int CompanyId가 Device 모델에 있습니다. 이것은 큰 낭비가없는 Device 테이블에만 하나의 필드를 추가합니다.

 protected void Page_Load(object sender, EventArgs e) 
     { 
      (SalesSQLEntities db = new SalesSQLEntities()) 
      { 
       // Get user ID 
       System.Guid UserID = Tools.Tools.getCompanyGuid(); 

       // Find all transactions of this company 
       var devItemList = (from dev in db.Devices 
             where dev.Location.CompanyGuid == UserID 
             select dev).ToList(); 

       DeviceList.DataSource = devItemList; 
       DeviceList.DataBind(); 
      } 
     } 

내가이 이미 테이블 사이의 직접 링크를 만드는 것보다 더 좋은 디자인이라고 제안 :

0

나는 수동으로 다음 코드를 사용하여 데이터를 결합하여 장치가 회사에 의해 필터링 할 수 있다는 것을 발견했다 간접 링크.

링크가 작을수록 유지 관리가 간단하고 데이터베이스 (무시할 수있는)가 작으며 명확한 다이어그램이됩니다.

이의가 있습니까?

관련 문제