성능 향상을 위해 때로는 버전 증가 (또는 버전 검사)없이 엔티티를 업데이트하려고합니다. LINQ TO SQL을 사용하여 방금 버전을 변경하지 않고 그대로 유지했습니다. NHibernate에서이 동작이 가능합니까?NHibernate - 버전 증가를 방지하는 방법이 있습니까?
답변
수정 사항 중 일부는 이 정말로 중요하지 않습니다. 그래서 나는 수정을 간단하게 마지막 하나 승리를 만들고 싶습니다. 거래는 우리가 시간적 순서의 관점에서 말할 수 있도록, 원자 될 운명 동안
, 그것은 간단하지하고 항상 트랜잭션이 포함 된 경우/최초의 마지막 이야기 까다로운 조금이다. 예 :
T1: start
T1: read row X with value A
T2: start
T2: read row X with value A
T2: write row X with value A2
T2: commit
T1: write row X with value A1
T1: commit
T2는 T1 이후에 시작되지만 A2는 변경되지 않습니다. 어떤 거래가 "마지막 거래"입니까? 마지막으로 시작한 것, 또는 마지막으로 종료 한 것? (커밋은 실제로는 원 자성이지만 트랜잭션에는 여전히 기간이 있기 때문에 추론하기가 어렵습니다.)
낙관적 또는 비관적 잠금은 이러한 상황을 피하기위한 것이므로 트랜잭션 순서로 더 잘 생각할 수 있습니다.
다시 말하지만, 질문에 대한 답을 얻고 싶다면 실제로 원하는 것이면 두 엔터티에 동일한 데이터베이스 테이블을 두 번 매핑 할 수 있습니다. 하나의 엔터티에 @version
이 있고 다른 하나에는 그렇지 않습니다. 그러나 그것은 다소 혼란 스러울 수 있습니다.
나는이 엔티티에 대한 모든 낙관적 인 잠금을 해제하고 싶지 않습니다. 그렇지 않으면 단순히 버전 속성을 제공하지 마십시오.하지만 버전을 증가시키지 않는 속성이 필요합니다. 그는 "낙관적 잠금"을 사용하여 지원됩니다 확인 : http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-property
낙관적-lock (옵션 - 디폴트는 true를) :이 프로퍼티에 대한 업데이트들이 optimistic 잠금을 획득하는 것을 필요로하는지 여부를 지정한다. 즉,이 속성이 더러울 때 버전 증가가 발생해야 하는지를 결정합니다.
- 1. stringWithFormat의 반올림을 방지하는 방법이 있습니까?
- 2. Tortoise SVN에 저장된 인증을 방지하는 방법이 있습니까
- 3. tabbar 항목의 구성을 방지하는 방법이 있습니까?
- 4. 기본 자동 완성을 방지하는 표준 방법이 있습니까?
- 5. 일치하는 URL에서 Google 검색어를 방지하는 방법이 있습니까?
- 6. OpenGL에서 2, 변이의 보간을 방지하는 방법이 있습니까
- 7. 특정 URL의 캐싱을 방지하는 방법이 있습니까?
- 8. 버전 3.0의 NHibernate & WCF
- 9. nhibernate 버전 3을 사용할 수 있습니까?
- 10. NHibernate 2.1 LinFu 버전
- 11. NHibernate 버전 혼동
- 12. 자동 증가를 다시 시작합니다.
- 13. PhpDocumentor에서 기본 버전 번호를 지정하는 방법이 있습니까?
- 14. NHibernate 2.1을 포함한 SQL.Data.SqlLite 버전
- 15. Windows Azure 평가판의 요금 청구를 방지하는 방법이 있습니까?
- 16. Drupal (7)에서 중복 분류 용어를 방지하는 방법이 있습니까?
- 17. C#에서 디버거가 디버거로 침입하는 것을 방지하는 방법이 있습니까?
- 18. 블록이 전달되지 않을 때 'yield'를 방지하는 더 좋은 방법이 있습니까?
- 19. 테이블 피벗/매핑에서 중복 항목을 방지하는 방법이 있습니까?
- 20. VBA 동적 배열의 추가 요소를 방지하는 방법이 있습니까?
- 21. VB에서 페이지 변수를 지우지 못하게하는 ASP.Net webapp을 방지하는 방법이 있습니까?
- 22. NHibernate 쿼리에서 스키마 이름 사용 - 버전 1.2.0
- 23. 비표준 자동 증가를 자동으로 계산하십시오.
- 24. 자 NHibernate 및 NHibernate에 검색 버전 문제
- 25. DataGridView 열의 증가를 막는 방법
- 26. NHibernate 버전 2.1.2.4000 매핑 안 새끼 문제
- 27. jquery ajax가 메모리 증가를 요청합니다.
- 28. NHibernate 세션을 사용하여 db에 변경 사항을 기록해야하는지 파악하는 방법이 있습니까?
- 29. NHibernate - 예외로부터 더 많은 정보를 얻을 수있는 방법이 있습니까?
- 30. NHibernate - SQL 함수를 사용하고 테이블을 반환하는 수식을 매핑하는 방법이 있습니까?
그러나 버전 필드의 요점을 무시하는 것은 아닙니다. "모든 변화에 따라 자동으로 업데이트되는 필드가 필요합니다. 오, 그런데, 모든 변경 사항으로 업데이트하지 않으려합니다." –
이 버전 확인으로 인해 성능 문제가 발생 했습니까? – Amitabh
나는 그것에 대해 의심한다. 버전의 요점은 낙관적 인 잠금입니다. "이 변경 사항을 버전 화하지 마십시오"라고 말하는 것은 "다른 사람이 동시에 엔티티를 수정하지 않는다는 것을 확신합니다."라고 말하면서, NHibernate에 말할 수 없다고 생각합니다. – ewernli