분명히 여기 .net과 싸우고 있습니다 ... 그리고 그 대답은 아마도 내가 잘못된 트리를 짖고 있으며 단지 5 년 동안 데이터베이스 디자인을 사용하는 것만으로 계속 진행해야한다는 것입니다. 전에.엔티티 프레임 워크 : 다중 상속
내가 원하는 것은 추상적 인 객체 클라이언트를 가지고 있으며 상속 된 객체가 2 개 상속 된 공급자 및 고객입니다.
클라이언트 모두 공급 업체 및 고객과의 관계가 1 : 0/1이이 레버뿐만 아니라 적은 유효성 검사 코드를 작성하는 저를 가능하게하는 것처럼 상속을 기반으로하는 솔루션은 잘 작동한다는 것을 의미하는 것 같다
강력하게 형식화 된 콜렉션.
그러나 엔티티 프레임 워크는 클라이언트 테이블에서 고유 ID를 사용하고 Customer 테이블과 공급 업체 테이블에서 참조 된 동일한 ID를 사용할 수 없도록합니다.
데이터베이스에 들어가서 상속 된 개체에서이 ID를 수동으로 편집하면 클라이언트 컬렉션에 인덱스 충돌이 발생하기 때문에 (문제는 아님) 문제가 발생합니다.
결과적으로 공급 업체와 고객으로 보이는 클라이언트를 가질 수 없게되었습니다 (동일한 ID를 공유하는 2 개의 별도 개체에 대한 아이디어에 만족했습니다).
이것은이 시나리오를 가장 잘 모델링하는 방법에 대한 디자인 문제로 연결됩니다 ... 'isCustomer', 'isSupplier'또는 참여하는 공급 업체 및 고객 테이블에 대한 조건부 조인 및 부울 필드를 수행해야 할 위험이 있습니다. 클라이언트와 코드를 작성하여 0-1 관계를 유지합니다.
다른 사람이 이런 종류의 문제가 있었나요? 우아한 해결책이 없습니까?
대안 : 동일한 개체를 여러 번 볼 필요가 있습니다. 즉, 한 필드에서 정수 값을 가질 수 없어 어떤보기가 허용되는지 결정할 수 없습니다. 어떤 bool 필드를 사용하여 어떤 객체 뷰가 허용되는지 결정해야합니다.
EF에서 가능한가요? 분명히 DB에서 뷰를 만들 수 있지만 ID 대신 EF에서이 작업을 수행하고 SQL을 생성해야합니다. (비록 내가 이미 sp를 정의하여 다양한 키와 제약 조건을 db에 설정하고 있지만 이것은 스키마를 생성하기 위해 EF를 사용하여 포기할 것을 의미한다)
IDD 슬프게도이 내가 오는하고 결론 ... 그게 내가 지금까지 가지고 올 한 간단하다. 적어도 ORM은 1 : 0/1을 관리합니다. 그냥 상속을 통해 선호 associatino의 옛 addage을 보여줍니다 다시 한번 규칙 (지금까지) –