2013-12-18 2 views
2

POCO 항목이 DB에서 변경된 경우 탐지 할 수있는 빌드 가능성이 있습니까? 예를 들어
: 1 편집은 ID 1 DB 항목의 변경 내용을 감지하십시오.

  • 사용자 2 객체

    1. 사용자는 ID 1 개체를 편집하고 저장합니다.
    2. 사용자 1도 절약하고 내가 객체를 다시로드와 비교 시도 사용자 2의 변화

    을 덮어하지만, 그건 좀 너무 복잡합니다.

    그래서 내가 원하는 것은 변경 사항을 저장하기 전에 개체가 데이터베이스에서 변경되었는지 자동으로 확인하는 것입니다.

  • 답변

    2

    동시성 토큰 구현에 설명 된 것처럼 내가 감사 필드를 추가 할 것입니다 선택하는 방법과.

    위와 같이 3 단계는 절대로 발생하지 않습니다. 두 번째 사용자가 변경 사항을 저장하려고하면 데이터베이스에서 허용하지 않습니다. 두 번째 편집 버전이 일치하지 않기 때문에 변경 내용을 저장하려고하면 EF에서 동시성 예외가 발생합니다. 정확한 예외 유형은 DbUpdateConcurrencyException이라고 생각합니다.

    당신은 유창하게 API를 사용하여 개체에 이러한 속성을 원하지 않는 경우

    , 이렇게 :

    Property(x => x.Version).IsConcurrencyToken(true).IsRowVersion(); 
    

    업데이트

    을 나는 종류의, 다시 아래 내 댓글을 .. ..

    먼저 EDMX가 아닌 코드를 사용하면 이러한 속성을 전역 적으로 적용 할 수 있습니다. 나는 그것을 한 번했고, 천천히 그것을 천천히 시도하고있다. 당신이 추상적 인 실체를 구현한다 할 수있다, 당신의 다른 모든 법인을하면 상속 :

    public abstract class BaseEntity 
    { 
        [ConcurrencyCheck] 
        [Timestamp] 
        public byte[] Version { get; set; } 
    
        // can also do this globally in FluentAPI with custom EntityTypeConfiguration 
    } 
    
    public class SomeEntity : BaseEntity 
    { 
        public int ID { get; set; } 
        public string SomeProperty { get; set; } 
    } 
    

    그러나,이 일을하는 데, 나는 그것을을하지 않는 것이 좋습니다 . 다른 사람들은 동의하지 않을 수도 있지만, 좋은 이유가있을 때 엔티티에 대한 동시성 만 강화해야한다고 생각합니다.

    +0

    감사! 그게 내가 찾고 있던 것이었다. 이 설정을 전체 테이블 또는 전체 .edmx로 설정할 수도 있습니다. –

    +1

    그렇게 생각하지 않지만 확실하지 않습니다. 이제 하나의 엔티티에 대해 수행하는 방법을 알았으므로 웹을 검색하고 동시에 전체 엔티티 모델에 동시성을 전역 적으로 적용하는 방법에 대해 다른 SO 질문을 할 수 있습니다. – danludwig

    +0

    답변을 업데이트했습니다. 읽어보십시오. – danludwig