在导航属性上定义数据注释

时间:2012-12-17 15:21:18

标签: c# asp.net-mvc asp.net-mvc-3 entity-framework entity-framework-4

我有一个Person类。一个人有名字和称呼。称呼是数据库中的另一个表(我继承了数据库)。

在用户界面中,我希望Salutation成为必填字段。这是我的模型的样子:

public partial class Person
    {
        public virtual string Id { get; set; }

        public virtual Nullable<long> SalutationId { get; set; }

        [Required]
        public virtual Salutation Salutation { get; set; }

        public virtual string FirstName { get; set; }

        [DisplayName("Last Name")]
        public virtual string LastName { get; set; }
    }

    public partial class Salutation
    {
        public virtual long Id { get; set; }

        public virtual string SalutationName { get; set; }

        public virtual string Status { get; set; }

        public virtual ICollection<Person> People { get; set; }
    }

这是对的吗?即使我已经进入Salutation,我仍然会收到一个验证错误,上面写着“称呼是必填字段”。

这一切都是在一个小时前开始的,直到一切正常。

如果我有时间思考并且没有追逐截止日期,我会自己解决这个问题。很奇怪你的压力是什么压力。

2 个答案:

答案 0 :(得分:3)

简答:问题出现在您需要验证的地方

您的称呼验证属性应放在Salutation model

修改:除了您的模型在每个媒体资源上使用public virtual访问修饰符。如果我的模型不需要,我会删除virtual

答案 1 :(得分:2)

@ElYusubov是正确的,但是:Person.SalutationId不应该是Nullable

public partial class Person
{
  public virtual long SalutationId { get; set; }
  ...

这意味着每个Person对象必须具有有效的SalutationId,这反过来又意味着数据库中的相关Salutation记录。