2010-07-14 4 views
0

MVP (Model View Presenter)를 프론트 엔드에서 사용하고, 백엔드에서 WCF 서비스를 사용하여 BLL과 통신합니다. 그 뒤에 EF4.0과 통신하는 DAL이 있습니다. 이것은 모두 잘 작동하고 있으며, 나는 여러 가지 Get과 Add 메소드를 만들었습니다. 이제 여러 가지 Update 메서드를 만들려고했습니다. EF4.0의 자체 추적 엔티티 (STE)를 사용하고 있기 때문에 모든 것이 잘 작동하고 구현이 쉽다는 생각이 들었습니다.자기 추적 엔티티가 내 WCF 서비스에서 변경되지 않음을 반환합니다.

이것은 그렇지 않습니다. 웹 프런트 엔드에서 항목을 변경하면 WCF 서비스로 다시 이동할 때 상태가 Unchanged로 유지됩니다. 엔티티가 변경되지 않았기 때문에 데이터베이스에서 아무것도 업데이트되지 않습니다. SO : EF 4 Self Tracking Entities does not work as expected 에 관한이 질문을 통해 n 계층 응용 프로그램에서 STE를 구현하는 방법에 대해 자세히 설명하는 기사 전체를 읽었습니다. (http://msdn.microsoft.com/en-us/magazine/ee335715.aspx) 내가 인용 :

이 클라이언트의 자동 추적 엔터티 템플릿의 생성 된 개체 코드를 재사용 확실합니다. 당신이 비주얼 스튜디오 또는 다른 도구에서 추가 서비스 참조에 의해 생성 된 프록시 코드 를 사용하는 경우는 일이 대부분, 에 적합한 보이지만 당신은 실체가 실제로 변경 사항을 추적에 보관하지 않는 것을 발견 할 것입니다 클라이언트. 글쎄, 난이 코드를 사용하여 서비스에 클라이언트를 만들기 위해 관리했습니다

는 :

var svc = new ChannelFactory<INorthwindSTEService>(
    "INorthwindSTEService") 
    .CreateChannel(); 

이 꽤 괜찮 작업이 나타납니다. 문제는 클라이언트에서 직렬화 된 엔티티를 얻는 방법입니다. 나는이 작가를보고 있어요 코드 예제에서 이 코드 사용

var products = new List<Product>(svc.GetProducts()); 
var customer = svc.GetCustomer("ALFKI"); 

을하지만, 내가 볼 못할 경우 해당 개체/단체/??? 나는 서비스 참조 추가 사용하여 만든 엔티티를 사용하여 테스트 한

(나는 고객제품에 대해서 이야기하고) 정의,하지만 작동하지 않습니다. 반환 된 항목의 상태는 여전히 이고 변경되지 않은 내용은입니다.

프론트 엔드에서 EF 엔티티를 참조하지 않을 것입니다. 왜냐하면 프론트 엔드에 개체를 직렬화하고 싶기 때문입니다. 비록 그것이 정말로 필요하다면, 나는 단지 그것을해야 할 수도 있습니다.

오, 엔터티 개체에 대한 MarkAsModified() 메서드를 사용하면 멋지게 작동하지만 엔티티 자체가 상태를 확인해야하므로 해킹이 더 많습니다.

진행 방법에 대한 조언이 있으십니까? 내 생각에 MarkAsModiefied() 메서드를 사용하거나 내 웹 응용 프로그램에서 엔티티 모델 프로젝트를 참조하면 실용적인 방법이 될 수 있지만 더 좋은 점이 있다면 먼저 시도해 보겠습니다.

+0

답변 할 수 없지만 조금 도와 드릴 수 있습니다. 서비스 참조 작성 및 서비스를 통해 전달되는 객체는 코드가 아닌 데이터로 구성됩니다. 자체 추적 기능을 사용하려면 데이터뿐만 아니라 생성 된 엔티티에 코드가 필요합니다. 그래서 당신이 인용 한 기사는 클라이언트 애플리케이션에서 엔티티 모델을 참조하도록 (내가 생각하기에 EF로는 적합하지 않은 것으로 생각한다.) 그래서 당신은 자체 추적 코드를 얻는다. 이것은 예상대로 작동해야한다. – Murph

+0

네, 그 일을해야한다고 생각했습니다. 다행스럽게도 다른 사람이 다른 솔루션을 사용하게 될 것입니다. 그렇지 않으면 현재 디자인을 변경해야합니다. 그것은 완전히 나쁜 것이 될 것입니다. 왜냐하면 저는 아직도 그것으로부터 무언가를 배웠기 때문입니다. –

답변

0

당신은 당신이 당신을 채우기 위해 ahve 파일을 .edmx 할 수있는 경로가 있음을 보게 될 .TT 파일에 보면 엔티티 frameowrk 프로젝트

에서 자기 추적 개체를 이동해야합니다.

이렇게하면 엔티티 프레임 워크와 별개의 프로젝트에서이 작업을 수행 할 수 있습니다.

그러면 프런트 엔드에서이 프로젝트를 참조하고 예상대로 추적 엔티티에 액세스 할 수 있습니다. 업데이트를 수행하기에 관해서는

이 ... 잘 메신저 나 자신을 찾고, P

당신이를 재사용 할 특정 확인 '이 말 (난 정말 그들의 다른에 그들을 체하지 않으려는 것은 자신을 말한다) 클라이언트에서 자체 추적 엔터티 템플릿의 생성 된 엔티티 코드가

인 경우이 낮은 순위를 사용하지 않으려한다고 말합니다.

이것이 문제입니다.

관련 문제