2009-04-22 3 views
3

저는 Linq to Entities를 사용하고 있습니다. 내 메인 테이블 인 Employee setup에 vendorID라는 필드가 있습니다. 공급 업체 ID는 공급 업체 테이블의 외래 키입니다.Linq to Entities (EF) : 조인을하지 않고 FK 값을 얻는 방법

지금 당장은 Employee 객체가 vendorID를 직접 노출하지 않습니다. 대신에, 나는 단지 그것을 이런 식으로 액세스 할 수 있습니다

var employee = (from e in context.Employees.Include("tbl_vendors") 
       where e.employeeID = 1 
       select e).FirstOrDefault(); 

//this gets the vendor ID 
int vendorID = employee.tbl_vendors.vendorID; 

잘 멋쟁이이지만 아무 것도 필요하지 않습니다 경우 조인을 강요하고 있기 때문에 데이터베이스에 추가 작업이다. tbl_vendors 테이블에 대한 조인을 강요하지 않으면 서 그 키 값을 얻을 수있는 방법이 있습니까?

답변

3

당신은 엔티티 참조를 통해 외부 키에 액세스 할 수 있습니다.

Employee employee = context.Employees.Single(e => e.employeeID == 1); 

Int32 vendorID = (Int32)employee.tbl_vendorsReference.EntityKey. 
    EntityKeyValues[0].Value; 

EntityReferenceEntityKey 클래스에 대한 참조를 위해 MSDN을 참조하십시오.

+0

키의 인덱스 위치 대신 이름으로 참조 할 방법이 없습니까? 새 키가 테이블에 추가되면 잠재적으로 변경 될 수 있으므로 인덱스를 사용하는 것은 위험합니다. – bugfixr

+1

키의 색인 위치가 아니라 키 내의 열의 색인 위치입니다. 복합 키의 가능성을 고려합니다 –

+1

EntityKey.EntityKeyValues를 검색하고 키를 보유하는 EntityKeyMember.Key 속성을 검사 할 수 있습니다 name을 사용하여 찾고있는 키 값을 찾으십시오. –

1
여기에 개체 이름에 대한 확인

하지하지만이 같은 데이터베이스 뭔가로 이동하지 않고 엔티티 키 특성에서 키를 잡아 수 있습니다

var employee = (from e in context.Employees 
       where e.employeeID = 1 
       select e).FirstOrDefault(); 

//this gets the vendor ID 
int vendorID = (int)employee.tbl_vendorsReference.EntityKey.EntityKeyValues[0].Value; 
5

사실 이것은 당신이 기본적으로이 작업을 수행 할 매우 간단합니다 :

당신이 가입 L2E 조인 밖으로 최적화하고있는 것처럼이 보이는 비록
var tblVendorID = (from e in context.Employees 
        select e.tbl_vendors.ID).FirstOrDefault(); 

. 이 같은 코드를 확인할 수 있습니다

:

var results = from e in ctx.Employees 
       select e.tbl_vendors.ID; 

var query = results as ObjectQuery<int>; 
string sql = query.ToTraceString(); 

희망이 알렉스 (마이크로 소프트) 할 수 있습니다.

관련 문제