2012-02-08 22 views
0

私のアプリケーションでは、ado.net dbcontext生成でdbから生成されたEntity Frameworkも使用しました。MVC3エンティティフレームワークでのクライアント側検証DBで生成

クライアント側がnot null fkがあるときうまく動作しますが、フィールドのはvarchar/nvarchar not nullmvcvalidatorだけのフィールドがを「必要」する必要がありますされていることを認識していないようですライン。

これはどうして起こりますか?

+1

**とコードが... ** – gdoron

答えて

4

いいえ、Mvc検証ツールはデータベースのメタデータを読み取ってクライアントの検証を実行しません。

通常、ViewModel/DTOを作成し、そこで検証を行います。例えば製品のように、フィールドが属性を持つ方法を参照してください。これはSystem.ComponentModel.DataAnnotations名前空間のものであり、検証制約でモデルを飾るために使用されます。その後、 http://www.asp.net/mvc/tutorials/older-versions/models-(data)/validation-with-the-data-annotation-validators-cs

をあなたのビューで(上記のような)モデルを使用して、MVCは検証を実行します、でも、クライアント側、および埋めるために返されたオブジェクトのインスタンスを使用します。

public class Product 
{ 
     public int Id { get; set; } 

     [Required] 
     [StringLength(10)] 
     public string Name { get; set; } 

     [Required] 
     public string Description { get; set; } 

     [DisplayName("Price")] 
     [Required] 
     [RegularExpression(@"^\$?\d+(\.(\d{2}))?$")] 
     public decimal UnitPrice { get; set; } 
    } 

ここに完全な例を参照してください。エンティティモデル

別のクラスを作成せずに、EntityFrameworkのエンティティを使用することを強く希望する場合は、バディークラスを作成できます。 > http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

スクロール=までしかし、私たちは私たちのORMマッピングするためのグラフィカルなツールを使用している場合:

は、こちらの記事を参照してください?

がありPersonであり、それは同様のTGE MetadataTypeAttribute

何かによってValidatorクラスをリンクアップされていますか?はい

[MetadataType(typeof(PersonMetaData))] 
public partial class Person 
{ 
} 
public class PersonMetaData 
{ 
    [Required(ErrorMessage = "Name is required.")] 
    public object Name; 
} 
+0

あり、私は同じ解決策を見つけました。 Microsoftは、いくつかの機能に欠けている「半良質」のオブジェクトを作成したと思います。エンティティ・フレームワークがプライマリ・キーと外部キーのようにすべての作業を行うことができなかった理由はわかりません。 ありがとうとにかく – antogg2004

+0

:)ビューモデルのアプローチはかなりいいですし、エンティティフレームワークからあなたを切り離しています。役に立つと思ったら[回答を受け入れる](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)を検討してください。 – gideon

関連する問題