Model中的DB外键验证

时间:2014-04-04 13:52:28

标签: asp.net-mvc entity-framework validation attributes foreign-key-relationship

我需要简单的模型属性验证。 可以说,我有这样的领域:

public class PersonDTO
{
    public int? GenderId { get; set; }
}

我需要干净的方法来验证GenderId,因为GenderId是Person的外键, 数据库表:

Gender
GenderID GenderName

我的想法:

[Range(1, 10, ErrorMessage = "GenderId is out of range")]
public int? GenderId { get; set; }

其中1和10应该是GenderId的较低和较高值。这不是一个选择。

我考虑过自定义验证器,它从数据库中选择所有的GenderID,如果需要,只需查看。这是更好的方式,但就像我希望的那样简单。 我有5个字段需要类似的验证。

也许有一些我不知道的内置方式? 谢谢。

PS。我正在使用Entity Framework进行数据库访问。

1 个答案:

答案 0 :(得分:2)

对于这样的事情,你最好只在POST动作中进行手动验证:

public ActionResult SomeAction(PersonDTO model)
{
    var gender = db.GenderIDs.SingleOrDefault(m => m.Id == model.GenderID);
    if (gender == null)
    {
        ModelState.AddModelError("GenderID", "That is not a valid id");
    }

    if (ModelState.IsValid)
    {
        ...