EF 6.X에서 코드 우선 접근 방식을 사용하고 있습니다. 두 엔티티와 컨텍스트가 있습니다db에서 엔터티를 읽을 때 외부 키와 연결된 속성이 설정되지 않았습니다.
class Product
{
long Id { get; set; }
string Name { get; set; }
ProductCategory ProductCategory { get; set; }
}
class ProductCategory
{
long Id { get; set; }
string Name { get; set; }
}
class ProductContext : DbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<ProductCategory> ProductCategories { get; set; }
}
내가 모델에서 데이터베이스를 만들 항목을 추가하고 다시 읽을 수 있어요 예상되는 명명 규칙을 사용하고로 - 데이터 주석없이와 유창한를 사용하지 않고를 API. 사실, 실제로 유창한 API를 사용하여 일부 속성에서 HasMaxLength를 설정했지만 해당 구성 코드는 키나 외래 키를 설정하지 않습니다. 여기
중요한 점은 다음과 같은 호출 할 때이다 :
Product product = context.Products.Find(1).FirstOrDefault();
제품의 ProductCategory이 제대로 ProductCategory 예를 채워집니다. 내가 겪고있는 문제는이 동작이 일관성이없는 것 같습니다.
WebApi 컨트롤러 내에서 ProductContext 클래스의 인스턴스를 만들고 위의 스 니펫과 동일한 작업을 읽습니다. 결과는 올바르게 인스턴스화되지만 ProductCategory 속성이 null로 설정된 제품입니다.
누구나이 두 가지 사용법의 차이점을 설명 할 수 있습니까? DbContext에서 파생 된 컨텍스트가 Product 테이블의 외래 키 항목을 ProductCategory 클래스의 인스턴스로 변환 할 수있는 전제 조건은 무엇입니까?
여기에 좀 더 관련 코드를 추가합니다. EF 컨텍스트를 어떻게 구성합니까? – Fabjan
* 제품의 ProductCategory가 ProductCategory 인스턴스로 올바르게 채워집니다. * - 'ProductCategory'가 지연로드되지 않습니다 ('가상 '이 아닙니다). 컨텍스트에서 이전에로드 된 경우에만 채울 수 있습니다. 코드의 두 부분이 다른 측면을주의 깊게 확인하십시오. –