2017-12-04 7 views
13

를 무시 Dapper - Update.Async (엔터티) 메서드를 호출합니다.단정 한 UpdateAsync 열에게 내가 Dapper.Contrib으로이 테이블을 갱신하려고

[NotMapped] 및 [UpdateIgnore] 속성을 사용해 보았지만 도움이되지 않았습니다.

참고 :이 열을 삽입 작업에 전달해야하므로 [계산 됨] 및 [쓰기 (거짓)]가 적절하지 않습니다.

누군가 데이터베이스에서 테이블을 업데이트 할 때이 열을 무시하는 방법을 알아낼 수 있습니까?

미리 감사드립니다.

+3

다른 라이브러리를 사용해야하며 Dapper에는 Update.Async 확장이 없습니다. 어쩌면 Dapper-Extension 또는 이와 비슷한 것이 있습니까? –

+1

@VoidRay 정답. Dapper.Contrb.Extensions –

+1

리포지터리 패턴 또는 임의의 가까운 패턴을 사용하고 있다면 (그리고 구체적인 구현에서 코드를 분리해야 함) 단순히 '업데이트'를 무시하고 자신의 논리를 사용할 수 있습니다. –

답변

1

[계산 된] 특성을 사용하는 것이 좋습니다. Dapper.Contrib Readme.md

+1

Dapper.Contrib에 대한 설명서의 내용이 혼동을주는 것으로 보입니다. [Computed] 속성은 삽입시 무시됩니다. 이는 사용 사례에 따라 다를 수도 있고 그렇지 않을 수도 있습니다. – BlakeH

+1

이전에 이미 시도했지만 삽입 작업에서 무시되었으므로 작동하지 않았습니다. 업데이트 할 때만 무시해야합니다. –

2

글쎄, 지원되지 않습니다. 여기에는 관련 issue이 있으며 솔루션은 Dapper v2에서만 예상됩니다. 또한 source code 검사 (꽤 간단합니다) 다음과 같이 업데이트 속성이 검색되는 것을 볼 수 있습니다

var allProperties = TypePropertiesCache(type); 
keyProperties.AddRange(explicitKeyProperties); 
var computedProperties = ComputedPropertiesCache(type); 
var nonIdProps = allProperties.Except(keyProperties.Union(computedProperties)).ToList(); 

그래서 키 \ ExplicitKey \ 계산되는 표시되지 않은 모든 속성 쓰기가 포함되어 있습니다. InsertAsync에 대해서도 마찬가지입니다 ( ExplicitKey 속성도 삽입물에 포함되어 있지만 속성은 결국 중요하지 않으므로 situtaion에서이 속성을 사용할 수 없습니다).

이렇게 구현하거나 포크하여 구현할 때까지 기다리거나 직접 UpdateAsync 메서드를 작성해야합니다. 소스 코드에서 매우 간단하고 다시 구현하기 어렵지 않다는 것을 알 수 있습니다.

2

@Evk가 이미 그의 대답에서 언급했듯이 아직 구현 된 솔루션이 없습니다. 그는 또한 대안을 언급했다.

이 외에도 Dapper (IDbConnection.Execute(...))를 사용하여이 특별한 경우 Dapper.Contrib를 직접 우회 할 수 있습니다.

DapperExtensions가 특정 열 업데이트 및 기타 복잡한 쿼리를 사용하여 비슷한 문제 (DapperExtensions 사용)가 발생하거나 전혀 생성 할 수 없거나 많은 작업이 필요합니다.

DapperExtensions 대신 Dapper를 직접 사용했습니다. 프로젝트의 다른 부분은 여전히 ​​DapperExtensions의 이점을 얻습니다. 이것은 밟는 것과 같습니다. 그러한 경우는 매우 제한적입니다. 나는 이것이 DapperExtensions를 조정/강요하는 대신 더 나은 해결책이라는 것을 발견했다. 이것은 또한 제 시간과 노력으로 저를 구해주었습니다.