Castle ActiveRecord를 사용하고 있지만 NHibernate에서 작동하는 솔루션이 ActiveRecord에서 작동해야하므로이 질문이 NHibernate에도 적용됩니다. 어쨌든, 내가 가지고있는 것은이 같은 기본 테이블 구조는 다음과 같습니다NHibernate/ActiveRecord - 외래 키 열에 만 매핑하는 방법은 무엇입니까?
TableA의 -hasMany-> TableB의
내가 해당 객체 EntityA 및 EntityB 있습니다. EntityA에는 EntityB 개체의 IList가 있습니다. 이 부분은 잘 작동합니다. 이제, EntityB에 EntityA에 대한 일종의 참조를 되길 바랍니다.
[BelongsTo("tableAid")]
public EntityA Parent { get; set; }
하지만 제가 정말하고 싶은 것은 :
[BelongsTo("tableAid")]
public int ParentId { get; set; }
나는처럼, 전체 EntityA 유형으로 다시 그것을 실제 참조를 제공하기 위해 EntityB에에 BelongsTo 속성을 사용할 수 있습니다 알고 따라서 EntityB는 실제 객체에 대한 참조가 아닌 상위 객체의 ID 만 저장합니다. 이것은 간단한 예이지만이 접근 방식을 사용하고자하는 좋은 이유가 있습니다. 지금 작업하고있는 응용 프로그램에는 특정 EntityB와 유사한 객체를 표시하는 페이지가 있으며 해당 페이지가 해당 상위 페이지에 대한 링크 (하이퍼 링크처럼)를 포함하고 싶습니다. 위의 첫 번째 접근법을 사용하여이 작업을 수행 할 수 있지만 실제로 필요한 모든 객체가 ID 일 때 전체 EntityA 객체를로드해야합니다. 거대한 거래는 아니지만 낭비되는 것 같습니다. 나는 [속성]을 외래 키에 플래그를 시도
그래서 같은 속성 ... 그게 더 나에게 해킹 것 같아, 다시 내가 게으른 로딩을 사용할 수 있습니다 알고 있지만 :
[Property]
public int ParentId { get; set; }
이 방법의 문제점은 새 개체 트리에서 EntityA.SaveAndFlush()를 수행 할 때 EntityB.ParentId가 null로 유지된다는 것입니다. 올바른 값이 데이터베이스에 쓰여지고 EntityA.Refresh()를 수행하여 값을 다시 EntityB.ParentId로 강제 설정할 수 있지만 다시 해킹 비트처럼 보입니다.
제안 해 주셔서 감사합니다. 나는 실제로이 접근법을 이미 시도했지만, 나는 그 질문에 그것을 나열하는 것을 잊어 버렸다. 대부분 효과가 있지만 완벽하지는 않습니다. :( –