2011-11-10 13 views
1

私のASP.NET MVC 3プロジェクトでは、別のクラスライブラリプロジェクト内にリポジトリパターンを実装しました。IValidatableObjectとDependency Injectionのサポート

また、ORMとしてEFを使用しています。また、私はIValidatableObejctインターフェイスでいくつかのモデル検証を実装しました。私が代わりに直接IAccommPropertySeasonPeriodAliasRepositoryを使用してのAccommPropertySeasonPeriodAliasRepositoryクラスを使用しているので、あなたが今から、ご覧のように私のモデルは完全に密結合、

[MetadataType(typeof(AccommPropertySeasonPeriodAlias.MetaData))] 
public partial class AccommPropertySeasonPeriodAlias : IValidatableObject { 

    private class MetaData { 

     [StringLength(5), Required] 
     [Display(Name = "Period Alias Name")] 
     public string AccommPropertySeasonPeriodAlias1 { get; set; } 
    } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { 

     var repo = new AccommPropertySeasonPeriodAliasRepository(); 

     if (repo.GetAll(this.AccommPropertySeasonID). 
      Where(x => x.AccommPropertySeasonPeriodAlias1 == this.AccommPropertySeasonPeriodAlias1) != null) 

      yield return new ValidationResult("Alias Name needs to be unique"); 
    } 
} 

:ここではそれがどのように見えるかです。ユニットテストのための

私のモデルができるように、この権利を行う方法で、よく、(これは右の単語であるかどうかわからない)何偽-でき

答えて

3

ユニーク制約は、そのエンティティの範囲外です。外部から新しいエンティティを追加するときは、この制約を検証する必要があります。この検証は、エンティティ自体に属するべきではありません。これは、エンティティだけではなく、エンティティがあるコンテキストに依存します。

+0

このように、このスコープ内にリポジトリを挿入する方法はありません。 – tugberk

+0

私はまた、データベース内の一意性制約を持つ値の一意性を検証しています。私のアプリケーションが同じデータをdbに挿入する方法はありませんが、ここでの目的はユーザーに間違ったフィードバックを与えることです。 – tugberk

+1

私はプロパティインジェクション(http://social.msdn.microsoft.com/Forums/en-CA/adodotnetentityframework/thread/c20f0a5e-0b2b-4a10-8c12-b99a69ae434b)を使うことができると思います。しかし、これは間違ったことです。エンティティはリポジトリにまったく依存してはいけません。 – driushkin

関連する問題