2013-08-17 12 views
5

Sto usando le estensioni di Dapper.net e vorrei ignorare determinate proprietà senza dover scrivere un mapper personalizzato completo. Come puoi vedere nel ClassMapper di seguito c'è un sacco di codice ridondante quando tutto ciò che voglio veramente è ignorare una proprietà. Quale sarebbe il modo migliore per realizzare questo?Come ignorare una proprietà di classe usando le estensioni di Dapper.net?

Mi piace la risposta fornita qui https://stackoverflow.com/a/14649356 ma non riesco a trovare lo spazio dei nomi in cui è definito "Scrivi".

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(); 
    } 
} 

risposta

4

La classe WriteAttribute si trova nel Dapper.Contrib.Extensions spazio dei nomi - che fa parte del progetto Dapper.Contrib. È possibile aggiungere che via nuget, il pacchetto è denominato "Dapper.Contrib"

+2

Il pacchetto Dapper.Contrib su Nuget isn' t aggiornato con il codice Lates sembra. Ho contattato il proprietario per aggiornarlo. –

+1

... e ora viene aggiornato e si spera che verrà aggiornato in futuro. –

4

Come si può vedere in Person.cs, basta chiamare AutoMap(); nel costruttore di voi ClassMapper. Ad esempio:

+0

Questo potrebbe funzionare. Solo che è meglio fare 'base.AutoMap()' o contrassegnare la classe 'CustomMapper' come' sealed'. Grazie –

3

È possibile decorare la proprietà con [Calcolato] e la proprietà verrà ignorata nell'inserto. Semanticamente potrebbe non essere perfetto, ma sembra di fare il lavoro:

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

Poi di nuovo, la risposta di Peter Ritchie è probabile che più spot-on con:

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