다음을 통해 공유


n 계층 응용 프로그램 작성(Entity Framework)

Entity Framework 에서는 웹 서비스 및 WCF(Windows Communication Foundation)에 사용되는 형식과 같이 원격 및 메시지 기반 엔터티 개체 교환이 가능한 형식으로 엔터티 개체를 serialize할 수 있도록 지원합니다. 개체 serialization은 이진 serialization, XML serialization뿐만 아니라 이진 스트림이나 메시지 기반 프로토콜을 사용한 전송을 위한 WCF 계약 serialization을 통해 수행할 수 있습니다. 자세한 내용은 개체 Serialize(Entity Framework)를 참조하십시오. 개체는 또한 메시지나 스트림으로부터 수신하거나, deserialize하거나, 개체 컨텍스트에 연결할 수도 있습니다. 자세한 내용은 개체 연결 및 분리(Entity Framework)을 참조하십시오.

ADO.NET 데이터 서비스를 사용하면 응용 프로그램을 통해 사용할 수 있는 XML 형식의 엔터티 데이터에 동적으로 액세스할 수 있습니다. 이 엔터티 데이터에 액세스하려면 GET, PUT, POST와 같은 표준 REST(Representational State Transfer) HTTP 동작을 사용합니다. 자세한 내용은 ADO.NET Data Services를 참조하십시오.

Entity Framework 를 사용하는 웹 서비스나 WCF 서비스에서는 다음 사항을 고려해야 합니다.

  • 이진 serialization과 데이터 계약 serialization을 사용할 경우 주 개체와 함께 관련 개체도 serialize됩니다. XML serialization은 관련 개체를 serialize하지 않습니다. 엔터티를 serialize할 때에는 지연 로드를 사용하지 마십시오. 지연 로드 기능은 액세스되는 각 관계 탐색 속성에 대한 쿼리를 수행하며, 이진 serializer와 WCF 데이터 계약 serializer는 둘 다 모든 관계 탐색 속성에 액세스합니다. 이로 인해 serialization 동안 예기치 않게 많은 쿼리가 수행될 수 있습니다. 자세한 내용은 개체 Serialize(Entity Framework)를 참조하십시오.

  • 상태 비저장 서비스를 사용하는 것이 좋습니다. 개체 컨텍스트가 요청이나 응답 기간 동안만 유지되도록 서비스를 설계해야 합니다. 원래 개체를 검색하기 위해 개체를 유지하거나 데이터 원본을 다시 쿼리하지 않고도 변경 내용이 적용될 수 있도록 메시지 교환 패턴에는 충분한 정보가 포함되어야 합니다. 예를 들어, 클라이언트에서의 개체 업데이트가 가능하려면 해당 서비스에서 업데이트된 개체가 원래 개체와 함께 반환되어야 합니다. 그러면 원래 개체를 데이터베이스에서 검색하거나 메모리에 유지하지 않고도 웹 서비스에서 변경 내용이 원래 개체에 적용됩니다. 자세한 내용은 방법: 분리된 개체에 대한 변경 내용 적용(Entity Framework)을 참조하십시오.

  • 개체는 항상 Detached 상태에서 deserialize됩니다. 개체를 ObjectContext에 연결 또는 추가해야 할 수도 있고, 아니면 원래 개체에 속성 변경만 적용할 수도 있습니다. 자세한 내용은 개체 연결 및 분리(Entity Framework)을 참조하십시오.

  • 컨텍스트에 개체와 관계를 추가한 후에는 ChangeObjectState를 사용하여 Added 또는 Modified 등의 새 상태를 설정할 수 있습니다.

  • 동시성 및 유효성 검사는 수동으로 관리해야 합니다.

자세한 내용은 다음 n 계층 개발에 관한 다음 문서를 참조하십시오.

Anti-Patterns To Avoid In N-Tier Applications

N-Tier Application Patterns

자동 추적 엔터티

Entity Framework 응용 프로그램에서 개체 컨텍스트는 개체의 변경 내용을 추적합니다. 그러나 개체 컨텍스트를 사용할 수 없는 다른 계층에서 개체를 조작해야 하는 경우에는 변경 내용 추적 방법과 해당 변경 내용을 개체 컨텍스트에 다시 보고하는 방법을 사용자가 결정해야 합니다. .NET Framework 버전 4부터는 자동 추적 엔터티를 사용하여 모든 계층에서 변경 내용을 추적할 수 있습니다. 자동 추적 엔터티는 변경 내용을 스칼라 속성, 복합 속성 및 탐색 속성에 기록하는 기능이 있는 엔터티 형식을 생성하는 T4(Text Template Transformation Toolkit) 템플릿으로 만들어진 엔터티입니다. 자세한 내용은 자동 추적 엔터티 작업을 참조하십시오.

개체가 개체 컨텍스트에 연결되지 않은 계층에서 자동 추적 엔터티를 사용하지 않고 변경 내용을 추적하려면 다음 단원의 메서드를 사용합니다. 그러면 관련 변경 내용을 데이터베이스에 유지하도록 컨텍스트를 쉽게 업데이트할 수 있습니다.

n 계층 응용 프로그램 개발과 관련된 API 사용

다음 메서드를 사용하면 개체의 전체 그래프를 추가한 다음 해당 그래프를 검토하여 개체의 속성에 적절한 값을 적용하고 엔터티 개체 및 관계에 올바른 상태를 설정할 수 있습니다.

엔터티를 추가 및 연결하려면 다음 메서드를 사용합니다.

멤버 설명

System.Data.Objects.ObjectSet.AddObject(

또는

System.Data.Objects.ObjectContext.AddObject(System.String,System.Object)

ObjectContext에 개체와 해당 관련 개체를 추가하고 엔터티 개체를 Added 상태로 설정합니다. 이 상태에서는 엔터티 개체에 고유한 키 값이 없어도 됩니다. 임시 키 값이 키 속성에 할당되며, 개체를 저장한 후 이 값은 데이터 소스에서 생성된 값으로 업데이트됩니다. 개체를 추가한 후에는 엔터티 개체의 상태를 적절하게 변경합니다.

System.Data.Objects.ObjectSet.Attach(

또는

System.Data.Objects.ObjectContext.Attach(System.Data.Objects.DataClasses.IEntityWithKey)

AttachTo

ObjectContext에 개체를 추가하고 이 개체를 Unchanged 상태로 설정합니다. Unchanged 상태에서는 Entity Framework 가 엔터티 키 값을 최종 값으로 처리합니다. 키 값이 동일한 특정 형식의 엔터티가 둘 이상이면 Entity Framework 에서는 예외를 throw합니다. 예외가 발생하지 않도록 하려면 AddObject 메서드를 사용하여 분리된 개체를 연결한 다음 상태를 적절하게 변경합니다.

스칼라 값을 변경하려면 다음 메서드를 사용합니다.

멤버 설명

System.Data.Objects.ObjectSet.ApplyCurrentValues(

또는

System.Data.Objects.ObjectContext.ApplyCurrentValues.String,

제공된 개체의 스칼라 값을 키가 동일한 ObjectContext의 개체에 복사합니다. 원래 값과 다른 값은 모두 수정된 상태로 표시됩니다.

현재 값이 있는 그래프가 있는 경우 원래 값을 적용하려면 ApplyOriginalValues 메서드를 호출합니다.

ObjectStateEntryApplyCurrentValues 메서드를 사용할 수도 있습니다.

System.Data.Objects.ObjectSet.ApplyOriginalValues(

또는

System.Data.Objects.ObjectContext.ApplyOriginalValues.String,

제공된 개체의 스칼라 값을 키가 동일한 ObjectContext의 개체에 대한 원래 값 집합에 복사합니다. 현재 값과 다른 값은 모두 수정된 상태로 표시됩니다.

ObjectStateEntryApplyOriginalValues 메서드를 사용할 수도 있습니다.

SetModifiedProperty

개별 속성을 Modified 상태로 설정합니다. 속성이 수정된 경우 전체 엔터티를 수정된 상태로 설정하는 대신 이 속성을 사용합니다.

GetUpdatableOriginalValues

ObjectStateEntry와 연결된 개체의 원래 값을 업데이트 가능한 버전으로 나타내는 OriginalValueRecord 인스턴스를 가져옵니다. 반환된 OriginalValueRecord 인스턴스는 개체의 원래 속성을 개별적으로 읽거나 업데이트하는 데 사용합니다.

CurrentValues

ObjectStateEntry와 연결된 개체의 현재 값을 나타내는 CurrentValueRecord 인스턴스를 가져옵니다. 반환된 CurrentValueRecord 인스턴스는 개체의 현재 속성을 개별적으로 읽거나 업데이트하는 데 사용합니다.

엔터티 및 관계 상태를 변경하려면 다음 메서드를 사용합니다.

멤버 설명

ChangeObjectState

엔터티 또는 관계를 Added 또는 Modified와 같은 새 상태로 변경합니다. 이 변경 내용은 엔터티가 참여하는 관계에 영향을 줍니다. 예를 들어 엔터티를 Added 상태로 이동하면 변경되지 않은 관계도 Added 상태로 이동됩니다. 마찬가지로 엔터티를 Modified로 표시하면 모든 스칼라 값이 Modified로 표시됩니다.

ObjectStateEntryChangeState 메서드를 사용할 수도 있습니다.

ChangeRelationshipState

두 엔터티 간의 기존 관계를 지정된 상태로 변경합니다. 엔터티 간에 관계가 없으면 이 메서드는 지정된 상태로 새 관계를 만듭니다. 외래 키 연결을 기반으로 하는 관계에는 이 메서드를 사용할 수 없습니다. 자세한 내용은 관계 정의 및 관리(Entity Framework)를 참조하십시오.

ObjectStateEntryChangeState 메서드를 사용할 수도 있습니다.

ChangeState

이 메서드는 ObjectStateEntry가 개체인지 관계인지에 따라 ChangeObjectState 또는 ChangeRelationshipState와 동일하게 동작합니다.

SetModifiedProperty

개별 속성을 Modified 상태로 설정합니다. 속성이 수정된 경우 전체 엔터티를 수정된 상태로 설정하는 대신 이 메서드를 사용합니다.

변경 내용을 데이터 소스에 저장하려면 다음 메서드를 사용합니다.

멤버 설명

SaveChanges

데이터 소스에 대한 모든 변경 내용을 유지합니다.

개체를 구체화하는 도중 정보를 가져오거나 설정하려는 경우나 이벤트를 구독하려는 경우에는 ObjectMaterialized 이벤트를 사용합니다.

멤버 설명

ObjectMaterialized

쿼리 작업이나 로드 작업의 일부로 데이터 소스의 데이터에서 새 엔터티 개체가 만들어지는 경우 발생합니다. 이 이벤트는 참조 개체가 로드된 후, 컬렉션이 로드되기 전에 발생합니다. 컨텍스트에 동일한 키 값을 가진 개체가 있으면 Entity Framework 에서는 개체를 다시 만들지 않으며 이 이벤트도 발생하지 않습니다.

참고 항목

개념

개체 사용(Entity Framework)