2014-01-23 3 views
2

저는 저장소와 함께 일하고 있습니다. 제가 열심히 노력하고있는 한가지는 할 수있는 한 대부분의 것을 분리시키는 것입니다. 따라서 미래의 관계형 데이터베이스에서 NoSQL과 같은 다른 것으로 바뀌면 우리 DAL을 변경해야합니다.EF없이 Breeze로 변경 사항을 저장하는 방법은 무엇입니까?

EFContextProvider을 사용할 필요없이 내 WebAPI 컨트롤러에서 SaveChanges 메서드를 구현하는 방법을 찾으려고했습니다. Breeze NoDb 샘플을 찾았지만이 샘플은 저장소에서 Breeze ContextProvider을 사용합니다. 이것은 Breeze가 JS 라이브러리이므로 문제가되는 부분이므로 내 응용 프로그램의 프레젠테이션에 관한 것입니다. 이 경우 저장소에 Breeze의 구성 요소를 사용하게하면 DAL과 프레젠테이션이 결합되므로 원하지 않습니다.

EF를 사용하지 않고 SaveChanges를 구현하는 방법을 다시 검색하면 SaveBundle을 SaveMap으로 변환하고 저장 논리를 구현하는 방법을 알려주는 하나의 좋은 대답이있는 곳에서 this 질문을 발견했습니다. 그러나 SaveMap의 항목이 하나의 Type 개체와 EntityInfo를 제공하기 때문에이 메서드를 사용할 수 없으므로이 메서드를 내 리포지토리에 사용하는 방법을 볼 수 없습니다.

따라서 EFContextProvider를 참조하지 않고 저장소와 ContextProvider를 연결하지 않고 SaveChanges를 처리하는 방법은 무엇입니까?

답변

2

SQL Server에서 NoSQL 데이터베이스로 전환 하시겠습니까? 지금 당장 그걸하고 싶지 않아? 얼마나 자주 백업 스토리지를 전환 할 계획입니까? 아마 그럴 지 모르겠다.

특히 SQL에서 NoSQL으로의 데이터베이스 전환이 패러다임에서 큰 변화라는 것을 알게되었습니다. 내 응용 프로그램 중 하나에서 SQL에서 RavenDb 로의 변환을 완료했습니다. 모든 것을 분리하고 저장소를 사용하는 데에도 불구하고 대부분의 응용 프로그램 저장소 논리를 다시 작성해야했습니다.

당신이하려고하는 것은 - 당신은 그것을 필요하지 않을 것입니다. 그러므로 인생을 힘들게 만드는 것을 멈추고 기능을 구현하십시오.

0

Breeze는 여전히 .NET 서버 인 EF 이외의 백엔드와 대화하는 방법을 보여주는 NHibernate 공급자를 제공합니다. ContextProvider는 모든. NET 공급자를 쉽게 구현할 수있게 해주는 편의성이지만 결코 필요한 것은 아닙니다.

NoSQL의 경우 NodeJs에서 호스팅되는 Breeze Node Provider와 MongoDB 샘플을 살펴 봐야합니다 (ContextProvider가 분명히 요구 사항이 아님을 보여줍니다).

가까운 미래에 Java로 작성된 Breeze 서버 구현을 기대할 수 있습니다. 여기에는 다시 "ContextProvider"요구 사항이 없습니다.

1

ContextProvider은 (Json.NET이 SaveChanges 메서드에서 제공하는) JObject를 실제 입력 된 .NET 개체로 변환하는 작업을 수행합니다. ContextProvider가 각 엔티티에 대해 생성하는 EntityInfo 객체는 엔티티 객체 자체뿐만 아니라 클라이언트에서 가져온 entityAspect 속성 (추가, 수정 또는 삭제됨), 변경된 모든 속성의 원래 값 및 자동 생성 키의 임시 값. 이것은 엔티티를 직접 저장하는 데 필요한 정보입니다. "SaveMap"은 편의상 유형별로 구성하지만 원하는대로 조작 할 수 있습니다.

post you referenced에서 설명한대로 ContextProvider를 사용하여 JObject를 엔티티로 변환 한 다음 해당 엔티티를 적절한 리포지토리에 전달할 수 있습니다. 리포지토리는 ContextProvider에 대해 알 필요가 없습니다.

관련 문제