2011-08-10 2 views
0

내 데이터베이스에서 "뷰"중 하나에 대한 사용자 GUI 설정을 세미콜론으로 구분 된 문자열 (예 : "1; 31; 5; 411;")로 저장하려고합니다.개인 멤버가있는 NHibernate 엔티티 디자인

저는이 프로젝트에서 NNibernate를 사용하는데, 이것은이 특정 전용 멤버에 대한 매핑과 코드입니다. User.Settings에 대한

C#을 엔티티 코드

private string _linkConsole = "0"; 

[DataMember] 
public LinkConsole LinkConsole 
{ 
    get { return new LinkConsole(_linkConsole); } 
    set { _linkConsole = value.GetSqlString(); } 
} 

XML 매핑 :

<property name="LinkConsole" type="System.String" access="field.camelcase-underscore" not-null="true"/> 

LinkConsole이 값을 전환한다 GUI 관련 설정을위한 공공 방법을 많이 가지고 특정 사립 회원의

이 설정을 데이터베이스에 저장할 시간이되면 .GetSqlString(); 문자열을 포맷하고 private member 인 _linkConsole에 씁니다.이 멤버는 NHibernate & 데이터베이스에 노출 된 private 멤버입니다.

문제 :

나는 GUI로 뭔가를 시도, 즉 :

User.Settings.LinkConsole.SetRightPaneContent(50); 

이 객체 LinkConsole에 저장되지 않습니다, 나는 이유를 알아낼 수 없습니다 ? 내가 브레이크 포인트를 설정 때, 나는 Visual Studio에서 메시지가 나타 얻을 :

귀하의 스텝에 요청 속성 또는 운영자의 자동 단계 오버 결과

어쩌면이 결과입니다 문제의, 나는 이것을 틀린 방법으로 설계하고 있는가? 그렇다면 개인 문자열 멤버와 함께이 작업을 수행 할 수 있습니까?

도움이 될 것입니다. 감사! :-)

답변

1

이 정말 NHibernate 문제가되지 않습니다. LinkConsole은 참조 유형입니다. 멤버를 설정하면 얻은 속성에서 set 메서드를 호출하지 않고 원래의 get에서 반환 된 인스턴스의 값을 설정합니다. 이 코드를 작동 시키려면 User에서 새로운 LinkConsole 인스턴스를 가져와 설정 방법을 호출 한 다음 사용자의 LinkConsole 속성을 구성된 인스턴스로 설정해야합니다.

+0

달콤한! 이렇게하면 전반적으로 좋지 않은 디자인/작동하지 않는 것을 디자인하려는 시도입니다. 감사합니다. tom.dietrich! – CoderBang

0

문제는 아마도 데이터베이스에 기록되는 개인 변수를 설정하는 방법 일 것입니다. 비주얼 스튜디오와 속성에 들어 서면 수 있도록 코드를 보지 않고 나는 확신 할 수 없지만 다음 문서를 보면 :

http://msdn.microsoft.com/en-us/library/cc667388.aspx

+0

입력 해 주셔서 감사합니다. w/breakpoint를 디버깅 할 수 있으며이 문제가 데이터베이스에 기록되기 전에 문제가 발생합니다. 개인 회원이 어떤 이유로 든 업데이트되지 않는 것과 같습니다. 데이터베이스에 적용된 "최종"인스턴스에서 개인 멤버가 변경되지 않은 것 같은 이유로이 프로세스 중에 두 개의 다른 LinkConsole 인스턴스가 만들어 졌을 수 있습니까? 그래서 저의 나쁜 디자인이라고 생각하는 이유는 무엇입니까? 그러나 이것이 실제로 효과가 있다면 그것은 매우 편리 할 것입니다. 어떤 디자인의 구현이라도 (누군가에 의해) 인정 될 것입니다! 감사합니다 – CoderBang

2

당신은 NHibernate 형식으로 사용하기 위해 LinkConsole 용 사용자 지정 IUserType을 구현하는 것을 고려 했습니까?

설명하는 유스 케이스는 정확히 IUserType을위한 것입니다.

+0

입력 해 주셔서 감사합니다! 이제 IUserType을 살펴 보겠습니다. :-) – CoderBang

관련 문제