2017-11-02 22 views
0

데이터베이스에서 데이터를 유지하고 데이터를 가져 오기 위해 사용자 지정 DAL을 만듭니다. 단일 엔티티의 경우에는 아무런 문제가 없습니다. 그러나 관련 엔티티에 대한 구현이 필요합니다. 이것은 복합 관계입니다.DAL에 Composite 릴레이션을 삽입하는 가장 좋은 방법

public class Customer : Contact 
{ 
    public CustomerNumber {get;set;} 
} 

내가에 삽입 인서트 (고객 고객) 방법으로 CustomerDAL 클래스를 만들어야합니다

예를 들어, 나는 특정 연락처 유형에 대해 연락 클래스

public class Contact 
{ 
    public ContactId {get;set;} 
    public Name {get;set;} 
} 

그리고 수업을 통해이 연락처 및 고객 테이블을 만들거나 각 엔티티를 별도로 삽입하는 2 개의 DAL, CustomerDAL 및 ContactDAL을 만들어야합니까?

이 작업을 수행하는 가장 좋은 방법/패턴은 무엇입니까?

답변

0

나는 대답에서 상속을 생각하지 않습니다. 귀하가하고있는 일은 고객에게 속성에 대한 액세스를 제공하지만 디자인을 "평평하게"하고 고객의 단일 연락처 만 허용하도록 DAL을 제한하는 연락처의 하위 클래스로 만드는 것입니다.

나는 속성을 통해 연락을 노출 유혹 할 것

public class Customer 
{ 
    public ... your usual customer properties go here 
    public Contact contact {get; set;} 
} 

당신은 내가 다음, 당신이 가진 것이 좋을 것 고객에 많은 접촉을 가질 가능성이있는 경우 :

public class Customer 
{ 
    public ... your usual customer properties go here 
    public List<Contact> contact {get; set;} 
} 

시간을 절약하기 위해 Entity Framework와 같은 ORM 도구를 사용하는 대신 자신의 DAL 양식을 손으로 돌리고 있습니까? 데이터베이스에 외래 키가있는 경우 이러한 외래 키를 검색하여이 속성을 생성 할 수도 있습니다. 그러나 물론 다른 유형의 데이터 저장소를 사용하고있을 수도 있습니다.이 경우 응답의이 부분에서 나를 무시하십시오. EF를 사용하여 POCO를 만들더라도 원하지 않는 경우 DB 쿼리에 POCO를 사용하지 않아도된다는 것을 기억하십시오. 그러나 ADO.NET의 속도가 여전히 필요하다면 EF를 사용하여 LINQ를 사용하지 않고 자신의 SQL 쿼리 나 저장된 procs를 실행할 수 있으며 연결 처리 및 쿼리 다시 시도 등의 이점을 누릴 수 있습니다.

+0

내 통제 범위를 벗어난 이유 때문에 실제 ORM을 사용할 수 없어 맞춤 DAL을 만들어야합니다. –

+0

고객이 연락처 인 이유는 내가 상속받는 이유입니다. 고객을 만들 때 다음을 삽입해야합니다. 고객 및 연락처 테이블에 문의하면 이름, 이메일 및 고객과 같은 정보를 매장에 저장합니다. 예를 들어 CustomerNumber와 같이 고객에 대한 특정 정보를 저장하는 데 사용됩니다. 예를 들어 연락처에서 상속 한 Supplier 또는 Student와 같은 다른 테이블이 있습니다. –

+0

디자인을 더 많이 볼 필요가 있지만, 실제로 수행하려는 작업에 근본적인 문제가있는 것처럼 들립니다. 그래서 원래의 질문에 답하기 위해 연락처와 고객에 대한 별도의 DAL 및 리포지토리 쿼리를 보관할 것입니다.하지만 이들은 DB의 별도 테이블이기 때문에 고객의 DAL/리포지토리가 다른 테이블을 호출하는 것을 막을 수는 없습니다. 당신이 저장소 패턴을 따르고 있다고 가정합니다. – Toad