엔터티 간 연결
연결을 만들어 BDC(비즈니스 데이터 연결) 모델에서 엔터티 간의 관계를 정의할 수 있습니다. Visual Studio가 모델 소비자에게 각 연결에 대한 정보를 제공하는 메서드를 생성합니다. 이러한 메서드는 SharePoint 웹 파트, 목록 또는 사용자 지정 애플리케이션에서 사용되어 UI(사용자 인터페이스)에 데이터 관계를 표시할 수 있습니다.
연결 만들기
Visual Studio 도구 상자에서 연결 컨트롤을 선택하고 첫 번째 엔터티(원본 엔터티라고 함)를 선택한 다음 두 번째 엔터티(대상 엔터티라고 함)를 선택하여 연결을 만듭니다. 연결 편집기에서 연결의 세부 정보를 정의할 수 있습니다. 자세한 내용은 방법: 엔터티 간 연결 만들기를 참조하세요.
연결 메서드
SharePoint 비즈니스 데이터 웹 파트와 같은 애플리케이션은 엔터티의 서비스 클래스에서 메서드를 호출하여 연결을 소비합니다. 연결 편집기에서 메서드를 선택하여 엔터티의 서비스 클래스에 메서드를 추가할 수 있습니다.
기본적으로 연결 편집기에서는 원본 및 대상 엔터티에 연결 탐색 메서드를 추가합니다. 원본 엔터티의 연결 탐색 메서드를 사용하면 소비자가 대상 엔터티 목록을 검색할 수 있습니다. 대상 엔터티의 연결 탐색 메서드를 사용하면 소비자가 대상 엔터티와 관련된 원본 엔터티를 검색할 수 있습니다.
적절한 정보를 반환하려면 이러한 메서드에 각각 코드를 추가해야 합니다. 고급 시나리오를 지원하기 위해 다른 형식의 메서드를 추가할 수도 있습니다. 이러한 메서드에 대한 자세한 내용은 지원되는 작업을 참조하세요.
연결 유형
BDC 디자이너에서 두 가지 유형의 연결, 즉 외래 키 기반 연결 및 외래 키 없는 연결을 만들 수 있습니다.
외래 키 기반 연결
원본 엔터티의 식별자를 대상 엔터티에 정의된 형식 설명자와 연결하여 외래 키 기반 연결을 만들 수 있습니다. 이 관계를 통해 모델 소비자는 사용자에게 향상된 UI를 제공할 수 있습니다. 예를 들면 사용자가 드롭다운 목록에 고객을 표시할 수 있는 판매 주문을 만들 수 있도록 하는 Outlook 양식입니다. 또는 사용자가 고객의 프로필 페이지를 열 수 있도록 하는 SharePoint 판매 주문 목록입니다.
외래 키 기반 연결을 만들려면 동일한 이름 및 형식을 공유하는 식별자와 형식 설명자를 연결합니다. 예를 들어 Contact
엔터티와 SalesOrder
엔터티 간에 외래 키 기반 연결을 만들 수 있습니다. SalesOrder
엔터티는 Finder 또는 특정 Finder 메서드의 반환 매개 변수의 일부로 ContactID
형식 설명자를 반환합니다. 두 형식 설명자는 모두 연결 편집기에 표시됩니다. Contact
엔터티와 SalesOrder
엔터티 간에 외래 키 기반 관계를 만들려면 이러한 필드 옆에 있는 ContactID
식별자를 각각 선택합니다.
원본 엔터티의 연결 탐색기 메서드에 대상 엔터티의 컬렉션을 반환하는 코드를 추가합니다. 다음 예제에서는 연락처의 판매 주문을 반환합니다.
public static IEnumerable<SalesOrderHeader> ContactToSalesOrder(int contactID)
{
const string ServerName = "MySQLServerName";
AdventureWorksDataContext dataContext = new AdventureWorksDataContext
("Data Source=" + ServerName + ";" +
"Initial Catalog=AdventureWorks;Integrated Security=True");
IEnumerable<SalesOrderHeader> orderList =
from orders in dataContext.SalesOrderHeaders
where orders.ContactID == contactID
select orders;
return orderList;
}
대상 엔터티의 연결 탐색기 메서드에 원본 엔터티를 반환하는 코드를 추가합니다. 다음 예제에서는 판매 주문과 관련된 연락처를 반환합니다.
public static IEnumerable<Contact> SalesOrderToContact(int salesOrderID)
{
const string ServerName = "MySQLServerName";
AdventureWorksDataContext dataContext = new AdventureWorksDataContext
("Data Source=" + ServerName + ";" +
"Initial Catalog=AdventureWorks;Integrated Security=True");
int TempContactID = (from orders in dataContext.SalesOrderHeaders
where orders.SalesOrderID == salesOrderID
select orders.ContactID).Single();
IEnumerable<Contact> contactList = from contacts in dataContext.Contacts
where contacts.ContactID == TempContactID
select contacts;
return contactList;
}
외래 키 없는 연결
식별자를 필드 형식 설명자에 매핑하지 않고 연결을 만들 수 있습니다. 원본 엔터티가 대상 엔터티와 직접 관계가 없는 경우에 이러한 종류의 연결을 만듭니다. 예를 들어 SalesOrderDetail
테이블에는 Contact
테이블의 기본 키에 매핑되는 외래 키가 없습니다.
Contact
에 관련된 정보를 SalesOrderDetail
테이블에 표시하려는 경우 Contact
엔터티와 SalesOrderDetail
엔터티 간에 외래 키 없는 연결을 만들 수 있습니다.
Contact
엔터티의 연결 탐색 메서드에서 테이블을 조인하거나 저장 프로시저를 호출하여 SalesOrderDetail
엔터티를 반환합니다.
다음 예제에서는 테이블을 조인하여 모든 판매 주문의 세부 정보를 반환합니다.
public static IEnumerable<SalesOrderDetail> ContactToSalesOrderDetail(int contactID)
{
const string ServerName = "MySQLServerName";
AdventureWorksDataContext dataContext = new AdventureWorksDataContext
("Data Source=" + ServerName + ";" +
"Initial Catalog=AdventureWorks;Integrated Security=True");
IEnumerable<SalesOrderDetail> orderList =
from orders in dataContext.SalesOrderHeaders
join orderDetails in dataContext.SalesOrderDetails on
orders.SalesOrderID equals orderDetails.SalesOrderID
where orders.ContactID == contactID
select orderDetails;
return orderList;
}
SalesOrderDetail
엔터티의 연결 탐색 메서드에서 관련된 Contact
를 반환합니다. 다음은 이에 대한 예입니다.
public static IEnumerable<Contact> SalesOrderDetailToContact(int salesOrderID, int salesOrderDetailID)
{
const string ServerName = "MySQLServerName";
AdventureWorksDataContext dataContext = new AdventureWorksDataContext
("Data Source=" + ServerName + ";" +
"Initial Catalog=AdventureWorks;Integrated Security=True");
int TempContactID = (from orders in dataContext.SalesOrderHeaders
where orders.SalesOrderID == salesOrderID
select orders.ContactID).Single();
IEnumerable<Contact> contactList = from contacts in dataContext.Contacts
where contacts.ContactID == TempContactID
select contacts;
return contactList;
}