2009-03-04 3 views
1

LINQ to Entities를 사용하여 다른 테이블에 외래 키가있는 테이블에 새 레코드를 추가하는 방법을 생각해 봅니다. 나는 시도하고 설명 할게 :연관을 사용하여 개체 LOB에 새 개체 만들기

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

내 질문은 어떻게 LINQ To Entities를 사용하여 새 LibraryItem을 만들고 상태와 연결합니까? 아래의 코드는 잘못되었지만 도움이 될 예제를 찾을 수 없습니다.

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(); 

답변

0

이는 "오른쪽"방법입니다 DB를 쿼리하십시오.)

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

좋은 : : 전혀 어떤 쿼리

는 "해키하지만 빠른 방법"입니다. Bad : item.Status를 참조 할 수 없습니다. 여전히 null이됩니다.

업데이트는 : There will be a better way to do this in .NET 4.0.

0

item.StatusReference 속성을 확인하십시오. 그것은 실제로 관계를 질의하지 않고 관계에 대한 메타 데이터의 발견/설정을 허용합니다.

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

나 :

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

... 개체가 이미로드되어있는 경우 entities.Status.First 항상 것입니다 (메모리에서로드

0

또한 entitymodel에 ItemEntity에 관련 테이블을 매핑 할 수 있습니다.

아래 URL에 게시 된 내 프로젝트의 Product -> ProductLanguage에있는 ProductName에 대해이 작업을 수행했습니다.

openticket.codeplex.com