2010-12-26 8 views
2

私はASP.NET MVC(一般的にはASP.NET)の新機能で、この技術の知識を得るために申し訳ありませんが、私はいくつかの簡単な質問をすることができます。私はASP.NET MVC 3 RC1をインストールして、私は次のことをやろうとしています。自動生成されたデータモデルのASP.NET MVC属性を指定する

VS2010の "LINQ to SQL Classes"テンプレートを使用してテーブルから完全に自動生成されたモデルがあるとしましょう。テンプレートは3つのファイル(それぞれ2つの.csファイルと1つの.layoutファイル)を生成し、生成された部分クラスはMVCモデルとして使用されることが期待されます。のも考えてみましょう、それをモデルにマッピングされています単一のDBの列は、次のようになります。

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Name", DbType = "VarChar(128)")] 
public string Name { 
    get { 
     return this._Name; 
    } 
    set { 
     if ((this._Name != value)) { 
      // ... generated stuff goes here 
     } 
    } 
} 

ASP.NET MVCエンジンはまた、いくつかの追加のものを指定する美しい宣言的な方法を提供しRequiredAttributeDisplayNameAttribute様および他の素敵な属性。このアプローチは完璧に動作しても

[Required] 
[DisplayName("Project name")] 
[StringLength(128)] 
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage = "_Name", DbType = "VarChar(128)")] 
public string Name { 
    ... 

...私は変更するまで:マッピングされたモデルは、純粋に自動genereatedモデルですので、しかし、私は手動でモデルを変更する、などのフィールドを指定してはならないことに気づきましたDBMLデザイナーのモデルはASP.NET MVC属性を自動的に削除します。では、DBMLモデルとそのフィールドのASP.NET MVC属性を安全に指定するにはどうすればよいですか?

ありがとうございます、そして、メリークリスマス。


更新#1:応答を期待している間

、私はそのようなものを発見した:

答えて

0

私はヘルパークラスを作成したくないので、自分の要件を最も満たす記事を見つけました。しかし、そのアプローチは、何らかの理由で動作しませんが、私はまだこれが原因でASP.NET MVCの経験の私の不足のためであると考えている(Step 4: Creating a Custom [Email] Validation Attributeを参照してください):

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

1

より正確なアプローチは、対応するDTO(ViewModelsまたはそれを呼び出すもの)を作成し、それらのDTOをAutoMapperのようなツールを使用してデータモデルオブジェクトにマッピングすることです(ファットデータモデルオブジェクトをオブジェクトをクリーンに変換する、

このタスク(DTOを作る)を行い、それらのDTOを生成するツールがいくつかあります。

VSギャラリーを見ると、多くのオプションがあります。

MicrosoftNLayerAppのような素敵なサンプルを見つけると、これらのテクニックをすべて使いこなすことができます。

最後に答えは、DisplayName属性でDTOクラスのプロパティに注釈を付けることです。

+0

1、キーがアップで提供することです1つのデータにすべてのルールを適用するというアイデアです。最初は難しい闘いですが、それに見合った価値があります。 –

+0

返事ありがとう、Jani。しかし、私は例を見つけました、それは私に近いです。 http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspxから取られ、 'MetadataTypeAttribute'を使用しますが、何らかの理由で動作しません。 –

+0

@Lyubomyr私はそれが単にDisplayNameの機能を持っていない検証のためだと思った、間違っていますか? –

関連する問題