Dapper에서 속성 무시하기

dapper

문제

Dapper ( http://code.google.com/p/dapper-dot-net/ )에는 모델 클래스의 속성을 무시하는 방법이 있습니까? 즉, 확장 Insert 방법을 사용할 때입니까? 내 모델 클래스에는 연결된 테이블에 유지되지 않는 계산 된 속성 집합이 있습니다.

감사. 페드로

수락 된 답변

음, Dapper에는 dapper.contrib, dapper extension 또는 dapper rainbow에 Insert 확장 방법이 없습니다.

Dapper 자체로 다음 작업을 수행 할 수 있습니다.

Animal a = new Animal {Age = 10, Family = "Canine"}
// only insert Age
cnn.Execute("insert Animal(Age) values (@Age)", a); 

일부 확장 클래스를 해결하기 위해 다음과 같이 할 수 있습니다.

cnn.InsertExtension("Animal", new{a.Age});

그럼에도 불구하고 복잡한 필터링 된 삽입물에 대해서는 항상 원시 Dapper로 되돌릴 수 있습니다.


인기 답변

Dapper.Contrib를 사용하는 경우 SqlMapperExtensions에서이 코드를 확인하십시오.

https://github.com/StackExchange/dapper-dot-net/blob/master/Dapper.Contrib/SqlMapperExtensions.cs#L54-L66

        private static List<PropertyInfo> ComputedPropertiesCache(Type type)
        {
            //...
            var computedProperties = TypePropertiesCache(type).Where(p => p.GetCustomAttributes(true).Any(a => a is ComputedAttribute)).ToList();

https://github.com/StackExchange/dapper-dot-net/blob/master/Dapper.Contrib/SqlMapperExtensions.Async.cs#L147-L165

        var computedProperties = ComputedPropertiesCache(type);
        var allPropertiesExceptKeyAndComputed = allProperties.Except(keyProperties.Union(computedProperties)).ToList();
        //...
        for (var i = 0; i < allPropertiesExceptKeyAndComputed.Count; i++)
        {
            //...

따라서 클래스의 속성에 ComputedAttribute 를 추가하면 Dapper.Contrib는 해당 속성을 데이터베이스에 삽입하지 않습니다. Dapper가 이러한 속성을 무시하게하는 것에 대해 걱정할 필요는 없으며 Dapper.Contrib 만 무시하면됩니다. 당신이 dapper 쿼리 select * from tablename 를 사용하면, 존재하는 컬럼만을 매핑하려고하기 때문에. 따라서 [Computed] 표시된 속성의 열을 만들면 안됩니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.