0

EntityFramework의 결과 집합을 영구적으로 제한하는 방법을 알고있는 사람이 있습니까? 나는이 같은 것을 말하고있다. Conditional Mapping. 이것은 정확히 하나의 예외를 가지고 달성하고자하는 것입니다. 프로그래밍 방식으로이 작업을 수행하려고합니다. 조건 값은 컨텍스트 생성시에만 EF로 전달되기 때문입니다. 옆에 나는이 칼럼이 맵핑에서 사라지는 것을 원하지 않는다.ObjectQuery ESQL을 재정 의하여 EF 결과 집합을 영구적으로 제한

나는 이것을 EF2.0과 리플렉션으로 어떻게 달성 할 수 있는지 알고있다. 내 ObjectQuery을 생성하는 CreateQuery() 메서드를 사용하고있었습니다. CreateQuery()은 추가 조건과 함께 내 자신의 ESQL 쿼리를 삽입 할 수 있습니다. WHERE TABLE.ClientID == value.

EF40의 문제점은 ObjectQuery이 없지만 ObjectSetCreateQuery() 만 사용되지 않는다는 것입니다. 내 자신의 ESQL 쿼리를 삽입하는 방법을 모르겠다.

결과 집합을 제한하려는 이유는 클라이언트 데이터를 서로 분리하기 위해서입니다. 이 분리는 컨텍스트 내에서 자동으로 수행되어야하므로 프로그래머는 각 쿼리에 조건 .Where(x => x.ClientID == 5)을 추가 할 필요가 없습니다.

아마도 내 접근 방식은 완전히 나빠질 수 있습니다. 그러나 어떤 대안을 모르겠습니다.

답변

1

반성 할 필요가 없습니다. ObjectContext에서 상속받은 클래스를 사용하거나이 기능을 더 잘 포장 할 UnitOfWork 및 Repositories의 사용자 정의 구현을 만들 수 있습니다 (상위 레이어는 EF 컨텍스트를 노출하지 않는 UnitOfWork 및 Repositories에만 액세스 할 수 있음). 개체 컨텍스트의

간단한 예 :

public class CustomContext : ObjectContext 
{ 
    private ObjectSet<MyObject> _myObjectsSet; 
    private int _clientId; 

    public CustomContext(string connectionString, int clientId) 
    : base(connectionString) 
    { 
    _myObjectSet = CreateObjectSet<MyObject>(); 
    _clientId = clientId; 
    } 

    public IQueryable<MyObject> MyObjectQuery 
    { 
    get 
    { 
     return _myObjectsSet.Where(o => o.ClientId == _clientId); 
    } 
    } 
} 
+0

들으이 잘 보인다. 꽤 많은 코딩 :) 나는 그것이 자동으로 할 수 있다고 생각. throu 엔티티 세트를 반복하고 일부 – yntelo

+0

... 일부 쿼리를 주입합니다. 그러나이 접근법은 나에게 적절하다. 나는 대체 방법이있어서 다행이다. – yntelo

+0

다른 문제가 있습니다. 당신의 예제를 사용하여 Include (...)를 사용할 수 없습니다. 포함은 매우 유용하고 편리합니다. ObjectQuery를 추가 조건으로 반환하는 방법은 무엇입니까? – yntelo

관련 문제