을 변화를 감지하고 사용하지 않습니다. 그러나, 나는이 작업을 수행 할 때문제는 내가이 할 때 NHibernate에 이전 값
Cat x = new Cat();
Session.Save(x);
x.Name = "fritz";
Session.Flush();
그게 내가 Session.Save()
를 호출 할 때이 무엇 때문에 내가 이름에 대한 NULL 얻을. 왜 NHibernate는 변경을 감지하지 못한다 - 또는 더 나은 아직, Flush()
시간에 INSERT 문에 대한 값을 취하는가?
추가 :Session.FlushMode
은 None
으로 설정되어 있으므로 그렇게 말할 때까지 자동으로 플래시되지 않습니다. GUID primary 키 (guid.comb 생성기 사용)도 사용하고 있습니다.
내가 이것을하는 이유는 세션을 "더티 (dirtiness)"추적기로 사용하기 때문입니다. 저는 Windows Forms 응용 프로그램을 작성하고 있으며 모든 양식은 양식이있는 한 지속되는 별도의 세션을 가지고 있습니다. 세션은 가능한 한 많이 연결이 끊어 지므로 ADO.NET 연결이 끊어지지 않습니다 (MDI 응용 프로그램이고 열 수있는 양식의 수 제한이 없습니다). 모든 양식에는 "OK"버튼과 "Cancel"버튼이 있습니다. "OK"버튼은 Session.Flush()
을 호출 한 다음 양식을 닫습니다. "취소"버튼은 양식을 닫고 사용자가 변경 한 내용을 모두 무시합니다.
글쎄, 적어도 내가 원한다. 위의 버그로 인해 문제가 발생했습니다.
사실,하지만 조금 다른 방식으로 NHibernate를 사용하려고합니다. Windows 응용 프로그램을 만들고 있고 변경 추적을 위해 세션을 사용하고 있습니다. 즉, 양식을 열면 세션이 시작됩니다. 데이터를 검색해야하는 경우를 제외하고는 연결이 끊어져 있습니다. 양식에 "OK"버튼과 "Cancel"버튼이 있습니다. "OK"를 클릭하면,'Flush()'를 호출합니다. "취소"를 클릭하면 세션이 자동으로 삭제되고 모든 변경 사항이 손실됩니다. 이 문제를 제외하고는 ... –
자연히, 나는 또한 세션의'FlushMode'를'Never'로 설정하여 사용자가 "OK"를 클릭하기 전에 뜻하지 않은 커밋이 일어나지 않도록합니다. –
프리젠 테이션 모델!= 도메인 모델 – Paco