2013-02-25 2 views
0

이것은 EF4입니다. 간단한 질문이 있습니다. 아직) 나는 SaveChanges를을 (를 호출하지 않은EF : 로컬 데이터를 쿼리하는 방법

Dim NewOrder = context.SalesOrders.CreateObject() 
NewOrder.Number= 123 
context.SalesOrders.AddObject(NewOrder) 

과 맥락에서 번호 = 123이 사용에 주문이 있는지보고 싶어 : 내가 좋아하는 컨텍스트 객체에 몇 판매 주문을 추가하면 말

context.SalesOrder.FirstOrDefault(Function(x) x.Number=123) 

위의 쿼리가 Nothing을 반환하는 이유는 무엇입니까? 로컬 컨텍스트 개체 대신 데이터베이스를 검색하고 있습니까?

+0

'.FirstOrDefault'가'.AddObject'이면 괜찮습니다. – spajce

+0

@spajce : 그것은 당면한 질문이 아닙니다. 요점은 먼저 로컬 컨텍스트 개체에서 검색하려고한다는 것입니다. 'context.SalesOrder.Local'멤버가 EF5에서 (내가 듣고있는대로) 수행되는 작업입니다. 나는 EF4에서 그와 동등한 것을 필요로한다. – dotNET

답변

0

당신은 객체 상태 관리자를 통해 로컬 엔티티를 검색 할 수 있습니다. 이 기능을 일반 도우미 기능으로 사용할 수 있도록 할 가치가 있습니다.

0

번호는 SalesOrder 엔터티의 기본 키입니까?

그렇다면, 당신은 단지 첫 번째 쿼리로 로컬 엔티티를 .Find()를 사용하고 아무것도 로컬 엔티티의 컬렉션 발견되지 않는 경우에만 다음 데이터베이스를 조회 할 수 있습니다

context.SalesOrders.Find(number); 

참고 할 수있는 단지를 찾을 수 다른 LINQ 작업과 마찬가지로 lambdas가 아닌 기본 키를 허용하십시오. DbSet.Local 너무 뒤에서 무엇을하는지 실제로 그

context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Unchanged).Select(entry => entry.Entity).OfType<SalesOrder>() 

(C#을 구문하지만, VB.NET과 동등한 당신을 위해 명백해야한다) :

+0

예. 그것은 PK입니다. Find() 메소드는 어디에서 찾을 수 있습니까 (말장난 의도는 없습니다 :))? – dotNET

+0

방금 ​​답변을 업데이트했습니다. – Judo

+0

'.Find()'는'DbSet' 메소드입니다.'ObjectSet's에서는 사용할 수 없습니다. – hvd

관련 문제