0

自分のモデルのデータアニメーションをデータベースから直接取得する方法はありますか? 私は多くのデータとテーブルを持つデータベースを持っているので、データベースからエンティティフレームワークを使ってモデルを生成しています。クラスを取得しますが、エンティティフレームワークや他のormがデータベースから適切性と制約を直接得、 [必須]または[データ型(データ型.emailadress)]のようなデータアノテーションとしてクラス内にあります。asp.net mvcのモデルデータアノテーション

答えて

1

はい。

public class LocalizedModelMetadataProvider : DataAnnotationsModelMetadataProvider 
{ 

    protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, 
                Func<object> modelAccessor, Type modelType, string propertyName) 
    { 
     var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName); 
     if (containerType == null || propertyName == null) 
      return metadata; 

     // Load all metadata from your database here. 

     return metadata; 
    } 

} 

私はほぼ完了し、モデルや検証メッセージの両方のためのすべてのローカライズ(ゼロ・コード)を扱うことができる管理エリアを持っていGriffin.MvcContribと呼ばれるプロジェクトを作成しています:あなたはModelMetadataProviderクラスを継承することができます。データベースのサポートを得るために、あなただけの次のインタフェースを実装することができ、それを使用することにより

// the actual code file has detailed explanations of each method. 
public interface ILocalizedStringProvider 
{ 
    string GetModelString(Type model, string propertyName); 
    string GetModelString(Type model, string propertyName, string metadataName); 
    string GetValidationString(Type attributeType); 
    string GetEnumString(Type enumType, string name); 

} 

更新

はどこに重要ではありません。また、モデルでDataAnnotation属性([Display]属性)を使用する必要はありません。属性を使用できるようにするには、DataAnnotationsModelMetadataProviderを継承しました。

  1. どこにでもクラスを作成します。データベース
  2. 設定MVCから読む
  3. は、Global.asaxの中でそれを使用するには

例:私は、私の溶液中で個別のプロジェクトで私のモデルクラスを生成する

ModelMetadataProviders.Current = new YourModelMetadataProvider(); 
+0

私のモデルフォルダにあるので、 mvcのソリューションでは、私は新しいクラスを追加し、生成されたクラスからコードをコピーし、私は手動のデータアノテーションを追加します。 modelmetadataProviderクラスを継承する場所を具体的に指定できますか? – GoranB

+0

私の更新を読んでください。 – jgauffin

+0

あなたはステップ2)データベースからの読み取りと3)私はちょっと混乱しているので、私はModelMetaDataProvideクラスを作成する必要がありますこのような何かをしたことはありませんか? – GoranB