2013-06-09 11 views
7

クイック質問...C#データ注釈

私はインターフェイスでの表記を入れた場合

...

セイ[必須]

することができます私はOMMITそのためのC#クラスで表記プロパティ?インターフェイスでのデータ注釈を配置する

すなわちすることができます私は...

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

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

または私はちょうどインターフェイスでの表記を入れて、これを実行しないようにする必要があります...

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

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

クラスに参加する必要があります。参照:http://bradwilson.typepad.com/blog/2011/08/interface-attributes-class-attributes.html –

答えて

7

動作しません。次のように http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/1748587a-f13c-4dd7-9fec-c8d57014632c/

簡単な説明は、あなたのコードを修正して見つけることができます:

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

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

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

そして、それはバーの文字列があるかどうかが明確ではない、以下のリンクでの説明は、理由としてあり複数のインタフェースを実装することが有効であるため、必須であるかどうかは関係ありません。

+1

@Mathew Jibinあなたは正しいです。サンプルを修正しました。 –

0

データアノテーションは機能しませんが、理由はわかりません。

EFコードを最初に使用している場合は、Fluent APIを使用してデータベースを作成するときにこの動作を強制できます。これは回避策であり、実際の解決策ではなく、データベースだけがEFやデータアノテーションで動作する他のシステム(制約はありません)をチェックするためです。

私はそれがIFooを実装したクラスを認識するときにIsRequiredこのにプロパティを設定することをシステムに伝える

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

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

でそれをやりました。

関連する問題