나는 쿼리 수준이 아닌 모델 수준에서 일부 엔티티 집합을 필터링하려는 시나리오가 있습니다. 즉, 기본적으로 필터링을 내 모델에 '하드 코딩'하고 싶습니다. 엔티티 집합에 대한 모든 쿼리에서 항상 동일한 Where 메서드 필터링을 반복하지 않아도됩니다. 더 구체적으로 말하자면, CampaignTypes
엔티티 집합이 있고 데이터 모델에서 나는 특정 비즈니스 영역에 속한 캠페인 유형 만 원하고 있습니다. 낮은 수준의 필터링을 사용하지 않으면 검색 할 때마다 CampaignTypes
을 쿼리 할 때마다 CampaignTypes.Where(ct => ct.BusinessArea == BusinessAreas.Outdoor)
을 사용해야합니다. DB 뷰를 생성하고이를 내 모델에서 대신 사용하는 반복 필터링을 피하려면 어떻게해야합니까?필터링 엔티티가 데이터 모델 수준에서 설정됩니다.
답변
public IQueryable<CampaignType> getCampaignTypes()
{
using (var context = new TestEntities())
{
var campaignTypes = context.CampaignTypes.
Where(ct => ct.BusinessArea == BusinessAreas.Outdoor).
AsQueryable<CampaignTypes>();
return campaignTypes;
}
}
사용하여이 방법의 결과 대신에 직접 액세스의 콘텍스트. "AsQueryable"메서드를 "AsList"등으로 변경하여 목록을 반환하거나 설정하는 등의 쿼리를 수정할 수도 있습니다.
필터와 엔티티 집합에 대해 걱정할 필요가없는 코드 사이에 다른 계층 (논리 계층)을 추가 할 수 있습니다. 이 레이어는 IQuerable 등을 반환 할 수 있으며 필터를 엔터티 집합에 적용하고 결과를 반환합니다.
그런 식으로 응용 프로그램의 다른 부분은이 필터를 적용하는 것에 대해 걱정할 필요가 없으며 데이터베이스에 대해 실행중인 단일 쿼리 (대부분의 경우)입니다.
예, 이전에 내 서비스 레이어에서이 작업을 수행 했었지만 그저 궁금 해서요. 어떤 '가까운 금속'접근에 관해서. – ProfK
있을 수 있습니다. 코드를 다시 생성하자마자 덮어 쓴 것이므로 생성 된 코드를 변경하는 것을 피할 수 있습니다. 비록 간단한 애플리케이션이라 할지라도 중간 계층은 얇은 논리적 계층이라 할지라도 일반적으로 어느 시점에서 필요하기 때문에 필요합니다. –
다른 파일에 다른 이름으로 다른 속성을 만들 수 있습니다. 모델의 기본 부분 클래스를 확장합니다.
EDIT :
namespace YourNameSpace
{
using System.Data.Objects;
public partial class SomeModelEntities
{
public ObjectSet<CampaignType> FilteredCampaignTypes
{
get
{
if ((_CampaignType == null))
{
_CampaignType = base.CreateObjectSet<CampaignType>("CampaignType");
}
return _CampaignType.Where(ct => ct.BusinessArea == BusinessAreas.Outdoor);
}
}
}
}
"다른 파일에 다른 이름으로 복제"하는 것이 무슨 뜻인지 잘 모르겠지만 특히 초기 모델에서는 생성 된 코드를 변경하는 것을 싫어합니다. 모델을 아주 자주 다시 생성합니다. – ProfK
- 1. 필터링 엔티티가 람다 설정
- 2. log4net의 로거 수준에서 필터링 할 수 있습니까
- 3. AppEngine에 모델 필터링 문제
- 4. Django - 모델 수준에서 관계의 더 나은 평가
- 5. ASP.NET 동적 데이터 필터링
- 6. 장고 모델 timerange 필터링 방법
- 7. QTreeView - 모델 정렬 및 필터링
- 8. 일반 데이터 격자 필터링
- 9. 필터링 데이터 격자
- 10. GPS 모듈에서 데이터 필터링
- 11. LinQ로 XML 데이터 필터링
- 12. 데이터 프레임 필터링
- 13. 가속도계 데이터 노이즈 필터링
- 14. NSTableView에서 NSPopUpButtonCell의 데이터 필터링
- 15. EntityDataSource를 사용하여 데이터 필터링
- 16. 조건이있는 데이터 집합 필터링
- 17. 들어오는 데이터 필터링
- 18. 버튼을 클릭하여 데이터 필터링
- 19. DataGridView에서 관련 데이터 필터링
- 20. wpf에서 데이터 집합 필터링
- 21. asp.net mvc 필터링 데이터
- 22. 데이터 필터링 nsarray iphone
- 23. 엔티티 데이터 모델, 고유 인덱스
- 24. 복잡한 코어 데이터 모델 마이그레이션
- 25. Django 관리자 선택 상자의 모델 결과 필터링
- 26. 는 클래스 수준에서 OdbcCommand.Connection
- 27. sortedlist를 데이터 소스로 사용하는 gridview에서 데이터 필터링
- 28. WPF 데이터 외부 데이터 모델
- 29. 여러 엔터티의 핵심 데이터 필터링
- 30. 파이썬 텍스트 파일의 데이터 필터링
한 가지 팁 : 저는 EF 쿼리를 위해 'using'블록을 사용하지 않는 방법을 배웠습니다. 클라이언트가 아직로드되지 않은 탐색 속성에 액세스하려고하면 EF가이를로드하고 이미 삭제 된 컨텍스트를 찾고 무례한 예외를 던지기 때문에 지연로드가 발생합니다. – ProfK
고마워, ProfK. 나는 게으른 로딩을 많이 사용하므로 이것을 인식하지 못했습니다. 오늘 저녁 (직장에서) 자세히 살펴보고 내 대답을 삭제하거나 수정해야하는지 알아 봅니다. –