2009-12-17 2 views
2

나는 nHibernate에 대해 매우 익숙하다. 그래서 이것은 아마도 매우 어리석은 질문 일 것이다. 하지만 어쨌든, 개체를 저장 잘 작동하지 않습니다 그것을 업데이 트합니다.nHibernate에서 객체 업데이트하기

이 내가 뭘하는지입니다 :

using (ISession session = _sessionFactory.OpenSession()) 
{ 
    session.SaveOrUpdate(schemaChange); 
    schemaChange.ScriptName = "New one"; 
    session.SaveOrUpdate(schemaChange); 
} 

첫 번째 될 saveOrUpdate는 데이터베이스에 schemaChange를 삽입합니다. 두 번째 개체는 동일한 개체를 업데이트해야하지만 nHibernate는이를 수행하지 않습니다. 출력에서

내가 얻을 :

DEBUG를 - 영속 인스턴스를의 : DotNetMigrations.Core.Domain.SchemaChange

DEBUG - 무시 영속 인스턴스

DEBUG - 이미 세션과 연관된 객체 : [DotNetMigrations .Core.Domain.SchemaChange # 129]

UPDATE

좋고, 그렇게 단순 (와 같은 어리석은 질문), 나는 그것을 스스로 발견했다 :

session.SaveOrUpdate(schemaChange); 
schemaChange.ScriptName = "New one"; 
session.Flush(); 

의미가있다. nHibernate는 내가 사용 해본 어떤 orm 도구보다 훨씬 우수합니다.

내가 알아낼 수없는 이유는 SaveOrUpdate 메서드가있는 이유입니다 ... 업데이트하는 경우 개체가 세션과 자동으로 이미 연결되어 있지 않습니까? (첫 번째 방법으로 데이터베이스에서 벗어 났기 때문에 과정을 거치지 않고 Flex RIA와 같이 보내지 않으면 다시 돌아 왔습니다)

그래서 개체가 이미 연결되어 있는지 SaveOrUpdate() 또는 그냥 플러시()합니까?

+0

질문에 자동 응답하여 여기 배지를 획득 할 수 있습니다 ... ^^ – Romain

+0

그래, 내 인생을 가치있게 만들었을거야 ;-) –

답변

2

세션 Session.Contains (개체)를 사용하여이를 파악할 수 있습니다. Save()와 Update()의 차이점은 필요한 경우 Save가 Id를 할당한다는 것입니다. 개체에 키가 없거나 키가 데이터베이스에 없으면 Update()가 실패합니다.

SaveOrUpdate는 객체의 상태가 무엇인지는 신경 쓰지 않지만 성배는 전혀 아닐지라도 일시적인 객체 작업에 관한 몇 가지 문제를 수정합니다. 개체의 상태를 알고 있다면 정확한 방법을 호출하는 것이 좋습니다.

이 정보가 도움이되기를 바랍니다.

관련 문제