2013-02-08 3 views
0

내가 기존 데이터베이스 EF에서 모델을 생성 한 후 3 개 테이블 엔티티 프레임 워크 룩업 테이블

Brands: 
BrandID int 
BrandName varchar(30) 

Products 
ProdID int 
ProdName varchar(30) 

BrandToProd: 
BrandID int => FK Brands.BrandID 
ProdID int => FK Products.ProdID 

을하는 것은 BrandToProd 테이블을 생략하고 브랜드와 제품 간의 다 대다 관계를 만듭니다. 다음 필드가있는 세 번째 엔티티를 갖고 싶습니다.

BrandName varchar(30) 
ProductsName varchar(30) 

이렇게하면이 엔티티에 스 캐 폴딩을 사용할 수 있습니다. 나는 브랜드 및 제품의 새로운 쌍을 추가 할 것입니다 때 같은 브랜드 또는 제품이 이미 데이터베이스에 존재하는 경우 이상적으로, EF 먼저 확인해야합니다 (중복을 피하기 위해), 만약 아니, 해당 테이블에 추가하고 그 BrandToProd 테이블에 매핑을 추가합니다. 브랜드 또는 제품이 이미 존재하는 경우 EF는 BrandToProd 테이블에 추가 할 때 기존 BrandID/ProdID 값을 제공해야합니다. 어떻게 할 생각이 있습니까?

+0

몇 가지 질문 : 1) 코드 첫 번째 또는 데이터베이스 먼저 사용하고 있습니까?2) 코드 첫 번째 인 경우 '[ForeignKey]'와 같은 DataAnnotations를 사용하고 있습니까? 아니면 문맥에서 Fluent API를 사용하고 있습니까? 이것은 확실히 가능하지만, 우리는 우리의 접근 방식을 지시하기 위해 더 많은 정보가 필요합니다! – da7rutrak

답변

0

내가 자주 DB 스키마를 변경하고 있습니다로 (사이트 개발 becsuse 것은 진행되는 나는 수시로 업데이트 데이터베이스 모델 필요)와 돈을 내 접합 테이블에 더미 ID 필드를 추가로 결국했습니다 ' 데이터베이스에 더미 필드를 제거/추가 할 때마다 필요합니다. 내가 사용했던 또 다른 옵션 - SQL에서 두 테이블의 SQL보기 및 EF의 대응 작업 (CRUD)에 매핑 된 저장 프로 시저

2

BrandToProd 테이블은 순수 접합 테이블입니다. 즉, 외래 키가 두 개인 테이블입니다. 이러한 테이블을 개념 모델에서 클래스없이 많은 관계로 모델링하는 것은 EF 기능입니다.

엔티티 클래스와 모델의 순수한 접합 테이블을 포함하는 가장 쉬운 방법은

  • 가에서 필드를 삭제 일시적으로
  • 생성 데이터베이스 테이블에 모델
  • 을 더미 필드를 추가입니다 데이터베이스
  • 갱신 데이터베이스
  • 의 모델은 edmx 다이어그램에서 속성을 삭제
,

다른 방법은 수동으로 edmx을 편집하는 것입니다,하지만 당신은 정말 당신이 무슨 일을하는지 알 필요가있다. 모델을 재생성하지 않으려면 두 번째 모델을 생성하고 차이점 뷰어를 사용하여 두 edmx 파일의 차이점을 조사하십시오. 이 작업을 수행해야하는 경우

그러나, 나는 궁금하다. 당신은 이것을 중복 검사에 연관시키는 것처럼 보입니다. 그러나 Brand 또는 Product을 데이터베이스에 추가하려면 중복 여부를 확인해야합니다. 새 브랜드를 추가하려는 경우 (예 : 기존 브랜드를 Product.Brands에 추가하는 경우) 브랜드가 존재하는지 여부를 확인할 필요가 없습니다. 만약 그렇다면, EF는 단지 "새로운"연관을 무시합니다.

1

대리 키를 사용할 때 Gert의 답변에 대한 추가 설명 : 이 중복 관리 문제입니다. 일반적으로 논리 키를 만드는 하나 이상의 필드가 있습니다.

  • a) Db에 고유 색인을 생성하십시오. DB는 제약
  • B를 위반 한 경우) 불평 삽입을 시도하기 전에 논리적 중복 체크를 실행합니다.
+0

감사합니다, 내가 기억 영역을 남겨두기로 결정한 이유는 그의 일과 그 밖의 아무것도하지 않고, 이제 컨트롤러 레벨에서 새로운 데이터를 삽입하기 전에 중복 검사에 대한 모든 논리를 수행합니다. –

관련 문제