문제

LINQ에서 엔티티를 사용하여 다른 테이블에 외국 키가있는 테이블에 새 레코드를 추가하는 방법에 대해 머리를 잡으려고 노력하고 있습니다. 나는 시도하고 설명 할 것이다 :

두 개의 테이블이있는 간단한 데이터베이스가 있다고 가정 해 봅시다. 예를 들어 하나의 LibraryItem과 다른 LibraryItemstatus를 호출합니다. LibaryItem에는 LibraryItemstatus 테이블에 대한 외국 키가 있으므로 항목에 상태를 할당 할 수 있습니다.

내 질문은 LINQ를 사용하여 엔티티에 새로운 라이브러리를 만드는 방법입니다. 아래 코드는 잘못되었지만 도움이 될 예제를 찾을 수 없습니다.

LibraryEntities entities = new LibraryEntities();

LibraryItem item = new LibraryItem();
item.Name = "some name";
item.SomeAttribute = "x";
// What do I do here?
// This seems wrong as I don't want a new status.
item.Status = new Status() { id = 1 };
// This seems wrong as I don't really want to have to query the repository
item.Status = entities.Status.First(s => s.StatusID == 1);
// 
entities.AddToItems(item);
entities.Savechanges();
도움이 되었습니까?

해결책

이것은 "올바른"방법입니다.

item.Status = entities.Status.First(s => s.StatusID == 1);

또는:

item.Status = entities.GetObjectByKey(new EntityKey("MyContext.Status", "StatusID", 1));

... 객체가 이미로드 된 경우 메모리에서로드됩니다 (Entities.status.first는 항상 DB를 쿼리합니다).

이것은 "해킹되지만 더 빠른 방법"입니다.

item.StatusReference.EntityKey = new EntityKey("MyContext.Status", "StatusID", 1);

양호 : 쿼리가 없습니다. 나쁜 : 항목을 참조 할 수 없습니다. 여전히 null이 될 것입니다.

업데이트: .NET 4.0에서는 더 좋은 방법이 있습니다.

다른 팁

항목을 확인하십시오 .StatusReference 속성. 이를 통해 실제로 쿼리하지 않고 관계에서 메타 데이터의 발견/설정이 가능합니다.

EntityModel에서 관련 테이블을 ITEMENTITY에 매핑 할 수도 있습니다.

아래의 URL에 게시 된 프로젝트의 ProductName-> ProductLanguage의 제품 이름에 대해 완료했습니다.

openticket.codeplex.com

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top