2010-12-16 3 views
7

NHibernate는 항상 모든 컬럼에 대한 업데이트를 생성 하는가?NHibernate는 모든 컬럼에 대한 update 문을 생성한다.

 
public class Person 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string Address { get; set; } 
} 

Person p = Session.Load(1); 
p.Name = "New Name"; 

Session.Flush();//Update for all columns, but I change only Name 

NHibernate의 정상적인 동작입니까, 저의 실수입니까? Fluent NHibernate와 AutoMapping을 사용합니다.

+1

Andy, 귀하의 다른 질문 중 일부가 다른 답변의 해결책을 알고 있다면, 귀하의 질문과 동일한 질문을하는 다른 사람들을 도울 수 있도록 동의하십시오. –

답변

10

기본 동작이지만 <class> 매핑에 dynamic-update="true"을 추가하여 NH가 수정 된 열을 업데이트하도록 할 수 있습니다.

+0

snap, beat me : –

+0

+1 ''매핑에서 '동적 업데이트'를 언급했습니다. 내가 NHibernate를 마지막으로 사용했기 때문에 나는 그것을 잊어 버렸다. =) –

+0

@Mauricio는 경쟁 제품과 경쟁 제품입니까? 미친 que tengo años 드 experiencia ... ;-) –

-2

NHibernate는 항상 매핑 된 모든 열을 업데이트합니다. 업데이트시 데이터가 기본 데이터 저장소에서 이전에 펌핑되었으므로 다른 열은 변경되지 않으므로 문제가되지 않으므로 기본적으로 열 값을 고유 한 원래 값으로 다시 설정합니다. 그것에 대해 아무런 문제가 없습니다.

이 동작을 재정의하려면 IInterceptor 인터페이스를 구현해야합니다.

+2

잘못되었습니다. 내 대답을 보라. –

+0

"그것은 기본 동작 [...]"과 "NHibernate는 항상 모든 매핑 된 컬럼을 업데이트 [...]"의 차이점은 무엇입니까? 이 두 문장은 나에게 똑같다. 그래서, downvote 여기에 자격이 있습니다. 또한,'동적 인 업데이트 '는'IInterceptor' 인터페이스를 구현함으로써 수행 될 수 있습니다. 그래서, 제 생각에는 전혀 잘못된 것이 아닙니다. 내 대답은 '동적 업데이트'에 대해 말하지는 않았지만, 나는 좀 더 우아한 접근법을 겸허하게 인정하지만, 하향 형은 부적당하다. –

+2

앞의 구절은 행동을 쉽게 바꿀 수 있다는 것을 의미합니다. 단지 기본값을 false로 변경하는 것입니다. 반면에 후자는 할 수 없다는 것을 의미합니다. 또는 뭔가 다른 일을하도록 많이해야합니다. 나는 IInterceptor로 어떻게해야하는지 모르지만, 필요하지 않은 매핑 옵션이다. 나는 대답이 잘못 되었기 때문에 downvoted 만 개인적으로 받아들이지 마라 :-) –

관련 문제