2011-01-10 14 views
2

私はpro asp.net mvc 2.0フレームワークを使用していますが、彼はまた、彼のデータ注釈タグを、SQLにlinqを生成するクラスに配置しているようです。データ注釈タグはどこに配置しますか?

[Table(Name = "Products")] 
    public class Product 
    { 
     [HiddenInput(DisplayValue = false)] 
     [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] 
     public int ProductID { get; set; } 

     [Required(ErrorMessage = "Please enter a product name")] 
     [Column] public string Name { get; set; } 

     [Required(ErrorMessage = "Please enter a description")] 
     [DataType(DataType.MultilineText)] 
     [Column] public string Description { get; set; } 

     [Required] 
     [Range(0.01, double.MaxValue, ErrorMessage = "Please enter a positive price")] 
     [Column] public decimal Price { get; set; } 

     [Required(ErrorMessage = "Please specify a category")] 
     [Column] public string Category { get; set; } 

     [Column] 
     public byte[] ImageData { get; set; } 

     [ScaffoldColumn(false)] [Column] 
     public string ImageMimeType { get; set; } 

私はこのようにデータベースを開発しないとどうなるのでしょうか。 linqtosql.dbml(linq to sqlクラス)ファイルを私のソリューションに追加するだけで、素晴らしいデザイナーを得ることができます。

私はこれらのデータ注釈をどこに置くのですか、私はこのコンテンツをすべて持っている別のクラスを作りますか?あるいは、ビューモデルでは?

答えて

4

MetadataType属性を使用してみましたか?

public class IProductMetadata 
{   
    [HiddenInput(DisplayValue = false)] 
    int ProductID; 

    [Required(ErrorMessage = "Please enter a product name")]   
    string Name; 

    [Required(ErrorMessage = "Please enter a description")]   
    string Description; 
    // etc 
} 

[MetadataType(typeof(IProductMetadata))] 
public partial class Product 
{ 
} 

これを使用して、生成されたコードのプロパティに部分クラスを介して属性を添付します。それは本当にうまくいく!

+1

基本的には、生成された各テーブルの部分クラスを作成し、次にこの部分クラスで検証データを入れます。 – chobo2

+0

すべてのプロパティの検証属性を定義するインターフェイスを作成し、MetadataType属性を持つ部分クラスを作成します。部分クラスにMetadataType属性を渡すと、プロパティ属性がそのクラスの適切なプロパティに適用されます。 http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspxまたはhttp://goneale.com/2009/03/04/usingをご覧ください例として、-metadatatype-attribute-with-aspnet-mvc-xval-validation-framework /を使用します。 –

0

私はビューモデルで行い、AutoMapperを使用してデータオブジェクトとビューモデルをマッピングします。

+0

明らかにこれがあなたの選択です。しかし、私の意見では、あなたのモデルが移植性がないということを意味するアプリケーション層のビジネスルールを検証しています。別のフロントエンドが必要な場合、たとえばモバイルデバイスの場合はどうなりますか? – nick

+0

あなたはそれをニックに入れますか? – chobo2

+0

ビジネスオブジェクトでValidationAttributesの大文字小文字を使用することはできますが、DisplayAttributesには魅力的なものはありません。また、デザイナーがクラスを生成するためにデザイナを使用している場合、テンプレートがクラスを再生成するたびに失われるため、DataAnnotationsを追加したくありません。 –

関連する問題