2011-11-10 47 views
1

在我的ASP.NET MVC 3項目中,我已經在單獨的類庫項目中實現了存儲庫模式。IValidatableObject和依賴注入支持

另外我使用EF作爲ORM。我還使用IValidatableObejct接口實施了一些模型驗證。下面是它的樣子:

[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"); 
    } 
} 

正如你看到的,從現在開始,我的模型完全緊耦合的,因爲我已經使用AccommPropertySeasonPeriodAliasRepository類,而不是直接使用IAccommPropertySeasonPeriodAliasRepository的。

什麼是這樣做的權利,使我的模型就可以了,好了,(不知道這是正確的字)的方式假能進行單元測試?

回答

3

唯一性約束超出了該實體的範圍。從外部添加新實體時,應該驗證此約束。這種驗證不應該屬於實體本身。這取決於實體所在的上下文,而不僅僅是單個實體。

+0

所以,你說沒有辦法在這個範圍內注入庫? – tugberk

+0

我也使用唯一約束來驗證數據庫中值的唯一性,並且我的應用程序沒有辦法將相同的數據插入到數據庫中,但我的目的是爲用戶提供很好的反饋。 – tugberk

+1

我想你可以使用屬性注入(http://social.msdn.microsoft.com/Forums/en-CA/adodotnetentityframework/thread/c20f0a5e-0b2b-4a10-8c12-b99a69ae434b)。但是這是一個錯誤的事情,你的實體根本不應該依賴倉庫。 – driushkin