2016-09-23 11 views
0

私は、データベースの最初のアプローチでEntity Frameworkをして働いています。私はすでに自分のアプリケーション内でモデルを定義しました。今私はコントローラとビューを扱っています。私はコントローラを作成するために足場を使用しました。今私は行を作成したい。ASP.NET MVCエンティティフレームワーク:データ注釈

のは、私は従業員を作成したいとしましょう、とのは、DBAとEFはこれを可能にしたとしましょう:

public partial class TBL_EMPLOYEE 
    { 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public TBL_EMPLOYEE() 
     { 
      this.TBL_EMPLOYEE = new HashSet<TBL_EMPLOYEE>(); 
     } 

     public int EMPLOYEE_ID { get; set; } 
     public String CO_WORKER_NUMBER { get; set; } 
     public string NAME { get; set; } 
     public string LAST_NAME { get; set; } 
     public string SALARY { get; set; } 
     public string PHONE_NUMBER { get; set; } 
     public string EMAIL { get; set; } 
     public string { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    } 

さて、私はのは1 VIEWこのビューを呼び出してみましょう、従業員を作成するためのビューを必要としますこのビューでは、ユーザーは名前だけと姓の値を指定する必要があります。どちらも必須です。

さて、私は同じクラスで、以下のデータ注釈属性を使用することができ、このVIEW 1場合には、それはなるだろう:

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

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

それでは、次の場合に行きましょう。私はのはこの1つで2 このVIEWを呼ぶことにしましょう、ユーザーはすべての属性のすべての値を指定する必要があり、別のビューを必要としています。名前と姓を除いてすべてが必要です。

REAL QUESTION

どのように私は両方のビューで同じモデルクラスを使用することができますか?ここで上記の例では、ビット愚かと些細な検証を見えるかもしれないが、私は実体が大きくあり、異なるのViewModelクラスを持つことのアイデアはちょうどそんなに仕事で大きなプロジェクトにしてきました。

私は、ユーザーが入力し、その検証に必要なものと特定するために、ビューごとのViewModelクラスを作成しなければならなかったポイントに、私の.NET開発では、このつまずいてきました。これが唯一の方法ですか?

+0

ビューごとに異なるビューモデルを作成することができます。 – Shyju

+0

部分クラスではなく、別の[ビューモデル](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc)を使用してください。 –

+0

@StephenMueckeはい、私はそれが唯一の方法だと思います。私は思っていた、別の方法があるかもしれない。しかし、それには多くの時間がかかります。たとえば、PHP Laravelと違うのは、Employeeモデルの形式に関係なく、すべてのオブジェクトを検証するときです – ggderas

答えて

1

:基本的に

https://stackoverflow.com/a/18898112/6850962

を、すべての状況(例:DisplayName)に適用されるデータ注釈をベースモデルを作成し、拡張モデルのバリエーション(例:Required属性)。

+0

ありがとうございました。プロパティのオーバーライドと継承の使用について考えたことはありませんでした。これは間違いなく私のコードを乱雑にします。ありがとうございました – ggderas

0

Entity Frameworkエンティティのアプローチを使用しようとしている場合は、これらのエンティティに検証属性を設定しません。私はどちらかになります。

  1. アップデートに(明示的にコードを書く、またはAutoMapperまたは他の多くのようなツールを使用して)別の異なるクラスを作成し、モデルにEFエンティティからデータをコピーし、その逆。とにかく、必要に応じて検証ルールを定義することができます。残念ながら、このアプローチは、モデルにしっかりと夫婦の検証を行いますので、モデルの再利用が可能な限りではないかもしれません。

  2. FluentValidation(https://github.com/JeremySkinner/FluentValidation)のようなより流動性の高い検証フレームワークを使用してください。これの利点は、ルールを内部クラスで定義し、状況に応じて異なるように適用できる外部クラスを定義することです。モデルには、ルールが適用されるかどうかを判断するためにモデル自体に何らかのインジケータが必要な場合がありますが、これは記述したシナリオを処理するための別の機能的アプローチです。このしようと、小さな変化でモデルの重複を避けるために

関連する問題