用于DB验证值的ASP.NET MVC验证体系结构

用于DB验证值的ASP.NET MVC验证体系结构,asp.net,validation,asp.net-mvc-3,architecture,Asp.net,Validation,Asp.net Mvc 3,Architecture,假设我有一节这样的课 public class Blog{ [Key] public int ID{get;set;} //these can only be tags that are in the tags db table IEnumerable<string> Tags{get;set;} //validation pseudocode to illustrate issue public bool IsValid() { //this

假设我有一节这样的课

public class Blog{
  [Key]
  public int ID{get;set;}

  //these can only be tags that are in the tags db table
  IEnumerable<string> Tags{get;set;}

  //validation pseudocode to illustrate issue
  public bool IsValid() {

    //this is my issue-- how do i get my db context/repository 
    //into my validation logic for this class? i need it
    var goodTags=db.Tags.Select(i=>i.Name);

    //if this tag isn't a "goodTag", then this shouldnt validate
    Tags.ForEach(i=> {

       if(!goodTags.Contains(i))
          return false;
    });
 }
 }
公共类博客{
[关键]
公共int ID{get;set;}
//这些只能是tags db表中的标记
IEnumerable标记{get;set;}
//用于说明问题的验证伪代码
公共bool是有效的(){
//这是我的问题——如何获取数据库上下文/存储库
//这个类的验证逻辑?我需要它
var goodTags=db.Tags.Select(i=>i.Name);
//如果此标记不是“goodTag”,则不应验证此标记
Tags.ForEach(i=>{
如果(!goodTags.Contains(i))
返回false;
});
}
}
如何在不将数据访问逻辑放入模型的情况下验证标记中包含的字符串是否在标记数据库表中?我正在使用MVC3。你是怎么做到的


谢谢

使用IInValidableObject进行自我验证,如下所示:

public Class Blog : IValidatableObject
{
      [Key]
      public int Id {get; set;}

      public ICollection<string> Tags {get; set;}


    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if(!Tags.Contains("testString"))
        {
              yield return new ValidationResult("Not a valid tag.", new [] {"Tags"});
        }
    }
}  
公共类博客:IValidatableObject
{
[关键]
公共int Id{get;set;}
公共ICollection标记{get;set;}
公共IEnumerable验证(ValidationContext ValidationContext)
{
如果(!Tags.Contains(“testString”))
{
返回新的ValidationResult(“不是有效的标记。”,新的[]{“标记”});
}
}
}  

我添加了更多的代码来说明真正的问题——将数据上下文导入到IValidateableObject的模型中。非常感谢您的回答,非常感谢。您的存储库体系结构是什么?实体?