문제

기존 다국적 데이터베이스를 사용하여 LinqToSQL과 함께 놀고 있지만 상당히 중요한 일대일 관계를 매핑하는 문제가 발생하므로 데이터베이스 디자인에 기능을 잘못 사용하고 있다고 생각합니다.

카테고리와 카테고리 데일의 두 테이블을 가정하십시오. 카테고리에는 CategoryID (PK), ParentID 및 TemplateId가 포함됩니다. CategoryDetail에는 CategoryId (Fk), LanguageId, 제목 및 설명 (적절한 언어)이 포함되어 있으며 PK가 CategoryId 및 LanguageId의 결합 된 상태가 포함되어 있습니다.

이 테이블을 LinqToSQL 디자이너로 끌어 들이면 결과 객체 모델에는 카테고리 데 테일 객체 모음이있는 카테고리가 있습니다. DataContext 레벨에서 LanguageId를 필터링 할 수 있기를 원합니다. 즉, 전체 범주가 범주 내에서 캡슐화되어 있으며 Category.categoryDetails 내에서 캡슐화 된 모든 언어 버전이 아닙니다.

이 데이터베이스는 이전 객체 라이브러리 (구식 커스텀 볼과 DAL)에서 잘 작동했지만 LinqToSQL이 필요한 결과를 제공하기 위해 이것을 변경해야 할 것을 두려워합니다.

이 관계 (및 언어 필터링)를 가능한 한 완벽하게 만드는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

협회의 속성을 볼 수 있습니다. (연관성을 나타내는 줄을 마우스 오른쪽 버튼으로 클릭하고 속성을 표시하십시오.) 속성은 일대일 또는 일대일 관계인지 알려줍니다. 이것은 단일 엔티티 협회 (일대일) 또는 엔티티 세트 협회 (일대일)를함으로써 코드에 반영됩니다.

다른 팁

고양이 세부 사항 테이블에 catid와 lang id의 pk가있는 것처럼 들리는 소리가 진실이라고 가정해야합니다. 그것은 그것이 왜 컬렉션을 넣는지를 설명 할 것입니다. Catdetails 테이블의 PK를 언급하지 않았기 때문에 틀릴 수 있습니다.

편집 : Catid와 Lang ID의 결합 된 PK는 1 : M 관계를 만들고 LINQ에서 SQL에서 실제로 올바른 일을하고 있습니다. 그것이 진정한 1 : 1 일 수있는 유일한 방법은 고양이 테이블에 Lang ID가 있고 FK의 일부라면입니다. 나는 당신이하고 싶은 일이나 그것을 구현하는 방법을 다시 생각해야 할 수도 있습니다.

LINQ에서 SQL이 데이터베이스 구조를 직접 모델링한다고 생각합니다. 두 개의 테이블이 있으므로 2 개의 객체를 만듭니다.

LINQ에서 엔티티를 살펴 보셨습니까?이를 통해 데이터베이스 스트루큐어 위의 다른 계층을 만들어보다 읽기 쉬운 클래스를 만들 수 있습니다.

1 : 1 관계가 없으므로 매핑만으로는 원하는 기능을 제공하지 않습니다. 그러나 부모 자동 생성 클래스에서 작업을 수행하는 방법을 쉽게 제공 할 수 있습니다.

public partial class Category 
{
  public IEnumerable<CategoryDetail> GetDetailsByLanguage(string langID)
  {
    return this.CategoryDetails.Where(c => c.LangID == langID);
  }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top