2

이미지 두 개의 다른 포럼과 같은 다른 데이터 소스의 스레드와 게시물을 저장하는 거대한 데이터베이스가있는 이미지. 각 데이터 소스에 대해 엔티티의 ID (예 : ThreadId, PostId ...)는 고유하지만 다른 데이터 소스에서 얻은 엔티티의 ID와 충돌 할 수 있습니다. 예를 들어, forum1과 forum2 모두 Threadid = 1 인 스레드를 가질 수 있습니다.Linq2SQL 데이터베이스 디자인 : 매핑 합성/서로 게이트 키

Linq2Sql과 저장소 패턴을 사용하여 내 응용 프로그램을 데이터베이스에 연결합니다. Linq2Sql 사용할 때 합성 키 (ThreadId 및 DatasourceId 사이) 피해야합니다 읽었습니다. 따라서 나는 대리 기본 키는 내 유일한 선택이라고 생각합니다 (입니까?) :

표 스레드 :

  • UNIQUEID - INT, PK
  • 이 DatasourceId - int로
  • ThreadId - INT
  • ...

표 게시물 :

  • UNIQUEID - INT, PK
  • DatasourceId -
  • PostId을 int로 -
  • 가 ThreadId 값 int - 지능, FK 지금

을 Threads.ThreadId하기 위해, 내 질문은 : 매핑 할 수 Linq2Sql 것 생성 된 클래스에서 게시물과 스레드 간의 1 : 1 관계? 게시물에 Thread.ThreadId에 대한 외래 키가 있고 동일한 ThreadId (물론 다른 DatasourceIds)를 가진 두 개의 엔터티가있는 경우 어떻게됩니까? 이 게시물에 할당 된 스레드의 컬렉션을 반환합니다 것 같아요 - 내가 싫어! 어떻게 든 여전히 동일한 DatasourceId를 공유하는 각 게시물마다 하나의 스레드를 반환 할 수 있습니까?

+0

에 where 절에 Datasourceid을 포함하여이 작업을 수행 할 수 있습니다 더 많은 내가 더 내가 ThreadId 및 DatasourceId을 결합하는 복합 키를 사용하여 솔루션을 선호하는 거라고 생각해. 그게 Linq과 어떻게 작동합니까? 코드의 두 필드를 설정하여 DB에 저장하거나 스레드와 게시물간에 공유 DataContext가 필요합니까? – Shackles

답변

0

LinqToSql은 특정 스레드 ID가 고유하다는 것을 알지 못합니다. 당신은 각 쿼리

var myThreads = DataContext.Threads.Where(t => t.Datasourceid == 1); 
+0

그러면 Linq에 의해 자동으로 생성 된 속성을 무시해야합니까? 더 나은 해결책이 있습니까? 데이터베이스 스키마는 초안 일뿐입니다 ... – Shackles

+0

어떤 속성을 의미합니까? L2S 대신 엔티티 프레임 워크를 고려 했습니까? – Geoff

+0

내 Linq2Sql 아키텍처가 이미 사용 중이므로 교환 할 수 없습니다. Linq는 각 엔티티에 대한 클래스를 생성합니다. 게시하다. 이 클래스에는 할당 된 Thread 객체에 대한 참조 인 Post.Thread 속성이 있습니다. 나는 Linq가 스레드에 대한 외래 키가 더 이상 1 : 1 관계가 아니라는 것을 당신의 충고를 받아들이면 탐지 할 수 있을지 확신 할 수 없다. – Shackles