2014-01-22 7 views
1

하는 것으로 - Entity Framework Code First, Navigation Property between different contexts/databasesEntity Framework - 다른 데이터 컨텍스트에서 "탐색 속성"? 누군가가 비슷한 질문을하고 나는이 대답 한 것을 생각하지 않습니다

을 나는 AccountsDbContext과 DataDbContext 있습니다.

public class Article 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    // Other data properties not shown for brevity. 

    public string UserId { get; set; } // who wrote/owns this article? 

    [ForeignKey("UserId")] 
    public virtual IdentityUser User; 
    /* I don't think I can do the above because IdentityUser is another context - 
     AccountsDbContext. 
    */ 
} 

내가 (아마 나뿐만 아니라 virtual 키워드) 외래 키 속성을 제거 생각 해요 : DataDbContext, 나는 클래스를 만들었습니다. Article에 액세스 할 때마다이 속성이 null 속성이 될 수 있습니다. 그렇다면 사용자를 얻기 위해 다른 쿼리를 수행해야합니다.

사용자가 작가의 역할 (예 : AccountsDbContext)으로 기사를 검색해야하는 경우 문제가 될 수 있습니다. 먼저 모든 결과를 수집하고 각 결과에 대한 사용자 정보를 쿼리 한 다음 필터링해야합니다. 이것은 다소 느리고 확실히 페이지 매김을 통한 계산의 낭비입니다.

이 상황을 처리하는 더 좋은 방법이 있습니까? 다시 말하지만 우리는 데이터 컨텍스트에서 외부 키를 사용할 수 없다는 가정하에 진행됩니다.

답변

1

여러 상황에 대한 몇 가지 이론이 있습니다. 가장 큰 문제는 데이터를 병합 할 수 없다는 것입니다.

하나의 질문은 다중 컨텍스트가 있어야한다는 것입니다. 그렇지 않으면 단일 컨텍스트를 사용하고 문제가 해결됩니다. 그렇지 않으면, 명시된 바와 같이 사용자 목록을 가져와 사용자를 반복하여 기사를 필터링해야합니다. 이것은 시간이 지남에 따라 느려질 수 있습니다.

또 다른 옵션은 문맥 중 하나에있는보기 전용 모델이므로 전체 세부 정보를 보려면 해당 컨텍스트를 호출 할 수 있습니다. 유지 관리가 약간 번거로울 수 있습니다.

+0

불행하게도 클라이언트는 계정 데이터베이스가 데이터와 분리되도록 지정했습니다.하지만 내 방식대로 사용해도 동일한 데이터베이스에 저장됩니다. 그러면 더 느린 중첩 쿼리로 처리해야합니다. –