2013-10-17 5 views
1

동일한 도메인을 동시에 두 곳에서 실행해야합니다. 한 쪽 끝은 "오프라인"을 실행할 수 있어야하며, "온라인"일 때는 상대방에게 데이터를주고 받아야합니다. 기본적으로 클라이언트로부터 데이터를 집계하고 업데이트 된 데이터 (제품의 최신 가격, 신제품 등)를 제공하는 중앙 서버를 확보했습니다. 나는 Hibernate를 사용하여 지속성을 관리하고있다. FluentNHibernate가 누락 된 이유는 무엇입니까? CascadeType.REPLICATE?

나는 다른 쪽 끝에서오고 개체를 얻을/병합을 통합/"로컬"데이터베이스에 연결하는 NHibernate에의 Replicate 방법

session.Replicate(detached, ReplicationMode.LatestVersion); 

를 사용하는 것을 시도하고있다.

참조 및 모음을 캐스케이드 할 수 없기 때문에 실행하지 못합니다.. FluentNHibernate에서 캐스케이드 옵션 ( 심지어 직접 NHibernate 소스 코드 을보고 있음)을 검토 한 결과 REPLICATE 캐스케이드 유형을 찾을 수 없었습니다. 최대 절전 모드의 문서에서 : CascadeType.REPLICATE

내 질문은 : 아무도 왜 FluentNHibernate은 옵션이 없습니다 알고 있습니까? 이런 종류의 캐스케이드 동작을 설정하는 다른/좋은 방법이 있습니까?

session.Merge(detached)과 함께 Cascade.Merge() 옵션을 사용해 보았지만 캐스케이드는 잘 작동하지만 주로 ID 생성 및 옵트 미스틱 잠금 (버전 관리) 때문에 두통이 듭니다.

EDIT : NHibernate의 소스 코드 DOES는 문자열 "replicate"에 매핑되는 ReplicateCascadeStyle 클래스를 갖습니다. Cascade/CascadeConverter (Mapping.ByCode 네임 스페이스의 클래스) 클래스는 옵션으로 복제 할 수 없습니다. 그래서 NHibernate는 Replicate에서 캐스 캐 이드를 지원하지만 수동 매핑을 통해서만 가능할 것입니다.

답변

1

좋아요, 약 100 개 이상의 클래스를 매핑하는 데 Fluent NHibernate를 사용하고 있기 때문에 xml 매핑으로 전환하는 것은 나에게 옵션이 아닙니다. 그래서 GitHub에서 Fluent NHibernate를 포크하고 누락 된 Cascade.Replicate 옵션을 추가하고 pull request을 보냈습니다.

누군가 도움이되기를 바랍니다.

관련 문제