POCO
항목이 DB에서 변경된 경우 탐지 할 수있는 빌드 가능성이 있습니까? 예를 들어
: 1 편집은 ID 1 DB 항목의 변경 내용을 감지하십시오.
- 사용자는 ID 1 개체를 편집하고 저장합니다.
- 사용자 1도 절약하고 내가 객체를 다시로드와 비교 시도 사용자 2의 변화
을 덮어하지만, 그건 좀 너무 복잡합니다.
그래서 내가 원하는 것은 변경 사항을 저장하기 전에 개체가 데이터베이스에서 변경되었는지 자동으로 확인하는 것입니다.
POCO
항목이 DB에서 변경된 경우 탐지 할 수있는 빌드 가능성이 있습니까? 예를 들어
: 1 편집은 ID 1 DB 항목의 변경 내용을 감지하십시오.
을 덮어하지만, 그건 좀 너무 복잡합니다.
그래서 내가 원하는 것은 변경 사항을 저장하기 전에 개체가 데이터베이스에서 변경되었는지 자동으로 확인하는 것입니다.
동시성 토큰 구현에 설명 된 것처럼 내가 감사 필드를 추가 할 것입니다 선택하는 방법과.
위와 같이 3 단계는 절대로 발생하지 않습니다. 두 번째 사용자가 변경 사항을 저장하려고하면 데이터베이스에서 허용하지 않습니다. 두 번째 편집 버전이 일치하지 않기 때문에 변경 내용을 저장하려고하면 EF에서 동시성 예외가 발생합니다. 정확한 예외 유형은 DbUpdateConcurrencyException
이라고 생각합니다.
, 이렇게 :
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; }
}
그러나,이 일을하는 데, 나는 그것을을하지 않는 것이 좋습니다 . 다른 사람들은 동의하지 않을 수도 있지만, 좋은 이유가있을 때 엔티티에 대한 동시성 만 강화해야한다고 생각합니다.
는 방법으로 어떤 빌드의 모르겠지만 난이 다음 문서
감사! 그게 내가 찾고 있던 것이었다. 이 설정을 전체 테이블 또는 전체 .edmx로 설정할 수도 있습니다. –
그렇게 생각하지 않지만 확실하지 않습니다. 이제 하나의 엔티티에 대해 수행하는 방법을 알았으므로 웹을 검색하고 동시에 전체 엔티티 모델에 동시성을 전역 적으로 적용하는 방법에 대해 다른 SO 질문을 할 수 있습니다. – danludwig
답변을 업데이트했습니다. 읽어보십시오. – danludwig