Domanda

Io sto usando un classe generata come modello, e vorrei aggiungere DataAnnotation attribuisce ad alcune delle sue proprietà. Come è un codice generato, non voglio aggiungere direttamente le annotazioni. C'è un altro modo per collegarli a una proprietà?

Avevo pensato di fare il modello di un'interfaccia, e l'utilizzo di una classe parziale per ottenere la classe generata per abbonarsi. C'è una soluzione meno elaborato, partendo dal presupposto che sarebbe anche il lavoro?

È stato utile?

Soluzione

Sì, c'è. È necessario creare classe di metadati che avrà le stesse proprietà che il modello originale, e collegarlo al modello con l'attributo MetadataType:

[MetadataType(typeof(MyModelMetadata))]
public partial class OriginalMyModel
{
}

public class MyModelMetadata
{
    [Required]
    public string MyProperty;  

    // ...
}

Nel OriginalModel esempio ebove è la vostra classe del modello corretto, e MyModelMetadata è una classe utilizzata solo per annotare le proprietà. MyModelMetadata dovrebbe avere le stesse proprietà che il modello ha.

Altri suggerimenti

È possibile utilizzare l'attributo MetadataType sulla vostra classe:

http://msdn.microsoft.com /en-us/library/system.componentmodel.dataannotations.metadatatypeattribute.aspx

In pratica, ho visto i metadati vanno fuori sincronismo con un modello generato abbastanza di frequente, però, che può portare a qualche mal di testa. Si consiglia di guardare in un meccanismo di convalida alternativo invece di annotazioni di dati.

Ho usato perfetto convalida , che è molto facile da imparare e iniziare a utilizzare. C'è anche una convalida Fluent per xVal pezzo integrazione in Fluent Validation 2.0 (ancora in beta) che si può portare nel progetto per la convalida lato client.

Fluent convalida consente di definire la convalida in una classe separata. Tutto quello che avrebbe bisogno di fare è aggiungere un attributo alla classe generata dicendogli cosa validatore da usare, che potrebbe essere realizzato attraverso classi parziali.

In alternativa, è possibile creare modelli specifici della vista che sono mappati dal vostro modello di dominio che contengono le annotazioni di dati. In tal caso, semplificare la mappatura avanti e indietro usando qualcosa come automapper . Quindi, se il vostro modello di dominio cambia, si ottiene compilazione in tempo gli errori contro l'approccio metadati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top