2013-06-09 20 views
7

Szybkie pytanie ...C# danych Adnotacje w interfejsie

Jeśli mogę umieścić zapis w interfejsie ...

Say [Wymagane]

mogę ommit że zapis w klasie C# własność?

czyli mogę ...

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

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

czy muszę po prostu nie umieścić zapis w interfejsie i to zrobić ...

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

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

To musi iść na zajęcia. Zobacz: http://bradwilson.typepad.com/blog/2011/08/interface-attributes-class-attributes.html –

Odpowiedz

7

Umieszczanie adnotacji danych w interfejsie nie zadziała. W poniższym linku znajduje się wyjaśnienie, dlaczego: http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/1748587a-f13c-4dd7-9fec-c8d57014632c/

Proste wyjaśnienie można znaleźć modyfikując swój kod w następujący sposób:

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

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

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

to nie jest jasne, czy ciąg Bar jest wymagane lub nie, ponieważ jest to ważne, aby zaimplementować więcej niż jeden interfejs.

+1

@Mathew Jibin Masz rację. Zmodyfikowałem próbkę. –

0

Adnotacja danych nie zadziała, ale nie wiem dlaczego.

Jeśli używasz kodu EF, możesz najpierw użyć Fluent API, aby wymusić to zachowanie podczas tworzenia bazy danych. Jest to obejście, a nie rzeczywiste rozwiązanie, ponieważ tylko twoja baza danych sprawdzi wiązanie, a nie EF lub inny system pracujący z Adnotacją Danych (jak przypuszczam).

Zrobiłem to z

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

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

powiem system, że kiedy uznają klasę wykonawczą IFoo skonfigurować właściwość isrequired.

Powiązane problemy