2013-06-09 6 views
7

Kurze Frage ...C# Daten Anmerkungen im Interface

Wenn ich eine Notation in der Schnittstelle setzen ...

Say [Erforderlich]

kann ich weglassen, dass Notation in der C# Klasse für die Eigenschaft?

also kann ich ...

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

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

oder muss ich einfach nicht die Notation in der Schnittstelle setzen und dies zu tun ...

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

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

Es muss in der Klasse gehen. Siehe: http://bradwilson.typepad.com/blog/2011/08/interface-attributes-class-attributes.html –

Antwort

7

Platzierung der Daten Annotation in der Schnittstelle wird nicht funktionieren. In folgendem Link gibt es eine Erklärung, warum: http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/1748587a-f13c-4dd7-9fec-c8d57014632c/

Eine einfache Erklärung kann durch Modifizieren Sie den Code wie folgt gefunden werden:

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

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

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

Dann ist es nicht klar, ob die Bar String erforderlich oder nicht, da mehr als eine Schnittstelle implementiert werden kann.

+1

@Mathew Jibin Sie haben Recht. Ich habe die Probe modifiziert. –

0

Die Daten Annotation wird nicht funktionieren, aber ich weiß nicht warum.

Wenn Sie zuerst den EF-Code verwenden, können Sie die Fluent-API verwenden, um dieses Verhalten beim Erstellen Ihrer Datenbank zu erzwingen. Dies ist ein Workaround, keine wirkliche Lösung, da nur Ihre Datenbank die Einschränkung überprüft, nicht EF oder irgendein anderes System, das mit Data Annotation arbeitet (naja, ich nehme an).

Ich habe es mit

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

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

das System anzeigt, dass, wenn es eine Klasse erkennen Umsetzung IFoo Sie die Eigenschaft auf IsRequired konfigurieren.