验证核心的多对多关系

时间:2018-03-25 22:36:38

标签: asp.net-mvc entity-framework data-annotations ef-core-2.0

我想知道是否有一种方法可以添加验证器,其中需要在组合框中选择作者,否则会显示错误。

在我的应用程序中,我有三个模型,书籍,作者和连接表Rel_Book_Author。

public class Book
{
    [Key]
    [Display(Name = "Id")]
    [Column("book_id")]
    public int book_id { get; set; }

    [Display(Name = "Title")]
    [Column("liv_title")]
    [Required(ErrorMessage = "Every book needs a title")]
    public string liv_title { get; set; }
}

public class Author
{
    [Key]
    [Display(Name = "Id")]
    [Column("aut_id")]
    public int aut_id { get; set; }

    [Display(Name = "Author's Name")]
    [Column("aut_name")]
    public string aut_name { get; set; }

    public ICollection<Rel_Book_Author> BookAuthors { get; set; }
}

public class Rel_Book_Author
{
    [Column("hla_aut_id")]
    public int aut_id { get; set; }
    public Author Author { get; set; }

    [Column("hla_book_id")]
    public int book_id { get; set; }
    public Book Book { get; set; }

}

1 个答案:

答案 0 :(得分:0)

我在这里假设您的视图的模型将是Rel_Book_Author类,或者是这些类的列表,因此您的视图将显示一本书(或多本书),并允许用户选择每本书的清单上是作者?

如果是,则验证应该有效as per any other model with data annotations

EF Core does not perform any validations itself,它希望您确实已经使用client-side validation并在服务器上(通常在控制器中)验证了对象,因此这些对象与特定对象相关联关系的类型(例如,多对多)在这里无关紧要。

存在one gotcha to watch out for,其Required属性为整数;也就是说,不可为空的整数(显然)不能为null,它将默认为零,这意味着设置Required实际上不会返回选择列表中整数的验证错误(因为属性的值始终为零或列表中选择的值)。

要解决这个问题,请将aut_id属性声明为可空(int?):

[Required]
public int? aut_id { get; set; }

或添加Range属性,例如

[Range(1, int.MaxValue)]
public int? aut_id { get; set; }