2013-08-17 13 views
5

Używam rozszerzeń Dapper.net i chciałbym zignorować pewne właściwości bez konieczności pisania kompletnego niestandardowego programu odwzorowującego. Jak widać w ClassMapper poniżej jest dużo zbędnego kodu, kiedy wszystko, co naprawdę chcę zrobić, to zignorować jedną właściwość. Jaki byłby najlepszy sposób, aby to osiągnąć?Jak zignorować właściwość klasy za pomocą rozszerzeń Dapper.net?

Podoba mi się odpowiedź podana tutaj https://stackoverflow.com/a/14649356, ale nie mogę znaleźć przestrzeni nazw, w której zdefiniowano "Write".

public class Photo : CRUD, EntityElement 
{ 
    public Int32 PhotoId { get; set; } 
    public Guid ObjectKey { get; set; } 
    public Int16 Width { get; set; } 
    public Int16 Height { get; set; } 
    public EntityObjectStatus ObjectStatus { get; set; } 
    public PhotoObjectType PhotoType { get; set; } 
    public PhotoFormat2 ImageFormat { get; set; } 
    public Int32 CategoryId { get; set; } 

    public int SomePropertyIDontCareAbout { get; set; } 
} 


public class CustomMapper : DapperExtensions.Mapper.ClassMapper<Photo> 
{ 
    public CustomMapper() 
    { 
     Map(x => x.PhotoId).Column("PhotoId").Key(KeyType.Identity); 
     Map(x => x.ObjectKey).Column("ObjectKey"); 
     Map(x => x.Width).Column("Width"); 
     Map(x => x.Height).Column("Height"); 
     Map(x => x.ObjectStatus).Column("ObjectStatus"); 
     Map(x => x.PhotoType).Column("PhotoType"); 
     Map(x => x.ImageFormat).Column("ImageFormat"); 
     Map(x => x.CategoryId).Column("CategoryId"); 

     Map(f => f.SomePropertyIDontCareAbout).Ignore(); 
    } 
} 

Odpowiedz

4

Klasa WriteAttribute znajduje się w Dapper.Contrib.Extensions nazw - co jest częścią projektu Dapper.Contrib. Można dodać, że poprzez Nuget pakiet o nazwie „Dapper.Contrib”

+2

Pakiet Dapper.Contrib na Nuget ISN” t zaktualizowany kodem Lates, wydaje się. Skontaktowałem się z właścicielem, aby go zaktualizować. –

+1

... a teraz jest aktualizowany i mam nadzieję, że będzie aktualizowany w przyszłości. –

4

Jak widać w Person.cs, zadzwoń AutoMap(); w konstruktorze ciebie ClassMapper. Na przykład:

public class CustomMapper : DapperExtensions.Mapper.ClassMapper<Photo> 
{ 
    public CustomMapper() 
    { 
     Map(x => x.PhotoId).Key(KeyType.Identity); 
     Map(f => f.SomePropertyIDontCareAbout).Ignore(); 
     AutoMap(); 
    } 
} 
+0

To mogłoby działać. Po prostu lepiej jest zrobić "base.AutoMap()" lub oznaczyć klasę 'CustomMapper' jako' zapieczętowane'. Dzięki –

3

Możesz udekorować nieruchomość za pomocą [Computed], a nieruchomość zostanie zignorowana przy wstawianiu. Semantycznie może nie być idealne, ale wydaje się, aby wykonać zadanie:

[Computed] 
public int SomePropertyIDontCareAbout { get; set; } 

Potem znowu, odpowiedź Petera Ritchie jest prawdopodobnie bardziej trafione z:

[WriteAttribute(false)] 
public int SomePropertyIDontCareAbout { get; set; }