2013-06-09 9 views
7

Domanda veloce ...C# dati Annotazioni Interfaccia

Se metto una notazione nell'interfaccia ...

Say [Required]

posso ommit che la notazione nella classe C# per la proprietà?

cioè posso ...

Interface IFoo 
{ 
    [Required] 
    string Bar {get; set;} 
} 

Class Foo : IFoo 
{ 
    string Bar {get; set;} 
} 

o ho bisogno non solo di mettere la notazione nell'interfaccia e fare questo ...

Interface IFoo 
{ 
    string Bar {get; set;} 
} 

Class Foo : IFoo 
{ 
    [Required] 
    string Bar {get; set;} 
} 
+0

Deve andare in classe. Vedi: http://bradwilson.typepad.com/blog/2011/08/interface-attributes-class-attributes.html –

risposta

7

Posizionamento del annotazione dei dati nell'interfaccia non funzionerà Nel seguente link c'è una spiegazione sul motivo per cui: http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/1748587a-f13c-4dd7-9fec-c8d57014632c/

Una semplice spiegazione può essere trovata modificando il codice come segue:

interface IFoo 
{ 
    [Required] 
    string Bar { get; set; } 
} 

interface IBar 
{ 
    string Bar { get; set; } 
} 

class Foo : IFoo, IBar 
{ 
    public string Bar { get; set; } 
} 

Allora non è chiaro se la stringa Bar è richiesto o no, poiché è valido per implementare più di un'interfaccia.

+1

@Mathew Jibin Hai ragione. Ho modificato il campione. –

0

L'annotazione dei dati non funzionerà ma non so perché.

Se si utilizza prima il codice EF, è possibile utilizzare Fluent API per forzare questo comportamento durante la creazione del database. Questa è una soluzione alternativa, non una soluzione reale perché solo il database controllerà il vincolo, non l'EF o qualsiasi altro sistema che funziona con Data Annotation (beh, suppongo).

ho fatto con

public partial class MyDbContext : DbContext 
{ 
    // ... code ... 

    protected override void OnModelCreating(DbModelBuilder dbModelBuilder) 
    { 
     dbModelBuilder.Types<IFoo>().Configure(y => y.Property(e => e.Bar).IsRequired()); 
    } 
} 

Raccontare il sistema che, quando si riconosce una classe che implementa IFoo si configura la proprietà a IsRequired.