2009-06-15 3 views
3

내가 알고있는 특정 ID (아래 예제에서 - Id가 5 인 심볼)가있는 데이터베이스에 행이 있다고 가정하면 다음을 수행 할 수있는 EntityObject를 만들 수 있습니까? 데이터베이스에서로드 할 필요없이 다른 엔티티에 연결될 수 있습니다 (동일한 시나리오는 "DeleteObject"에도 적용 가능합니다).Entity Framework에서 데이터베이스 호출없이 EntityKey에서 EntityObject를 생성

내가 해봤 다음

UserSpread spread = UserSpread.CreateUserSpread(5, 500000, 1.1m, 1.5m); 

EntityKey symbolKey = new EntityKey("Entities.SymbolSet", "Id", 5); 

Symbol symbol = new Symbol(); 
symbol.EntityKey = symbolKey; 

// dealingEntities.Attach(symbol); 

spread.Symbol = symbol; 
Entities.AddToSpreadSet(spread); 

I 얻을은 "AddToSpreadSet()"메소드에 예외 다음

"개체가 있기 때문에 이미 ObjectStateManager에 추가 할 수 없습니다 ObjectContext.Attach를 사용하여 기존 키가있는 객체를 첨부하십시오. "

나는 확산 (주석 선), I는 "() SaveChanges를"방법에서 다음을 얻을에 할당하기 전에 기호를 연결하려고하면 :

"개체가 있기 때문에 첨부 할 수 없습니다 EntityKey의 일부인 속성 값이 EntityKey의 해당 값과 일치하지 않습니다. "

아이디어가 있으십니까?
감사합니다,
Nir 씨

답변

3

난 그냥 (그냥 PK를 설정하여) 스텁 개체를 생성하고 문맥에 첨부하는 것입니다 사용하는 일반적인 방법. 그래서 여기

은 예입니다

Category existing = new Category {ID = 7}; 
ctx.AttachTo("Categories", existing); // Notice no use of EntityKey anywhere 


// build a new product 
... 
product.Category = existing; 
ctx.AddToProducts(product); 
ctx.SaveChanges(); 

이 관계를 구축을 위해 잘 작동하지만, 삭제하는 몇 가지주의 사항이 있습니다. 자세한 내용은 내 EF tips series을 확실히 확인해야합니다. 특히이 하나

Tip 9 - How to delete an object without retrieving it

희망이 당신이 요구하는지 무엇을 할 수

알렉스

+0

니스! 매력처럼 작동합니다, 많이 고마워요! Nir. – nirpi

1

에게 도움이됩니다. 다음과 같이해야합니다 :

dealingEntities.symbolReference.EntityKey = new EntityKey ("Entities.SymbolSet", "Id", 5);

의미가 있습니까? 엔티티 이름이 섞여있을 수 있으므로 자세한 정보가 필요하면 저에게 물어보십시오.

+0

연결되지 않은 모델을 사용하려는 경우이 방법을 사용하십시오. – JustEngland

관련 문제