C# 在导航属性上定义数据批注

C# 在导航属性上定义数据批注,c#,asp.net-mvc,asp.net-mvc-3,entity-framework,entity-framework-4,C#,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,Entity Framework 4,我有个人课。一个人有名字和称呼。Sallation是数据库中的另一个表(我继承了数据库) 在UI中,我希望称呼是必填字段。我的模型是这样的: public partial class Person { public virtual string Id { get; set; } public virtual Nullable<long> SalutationId { get; set; } [Required]

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

在UI中,我希望称呼是必填字段。我的模型是这样的:

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; }
    }
公共部分类人员
{
公共虚拟字符串Id{get;set;}
公共虚拟可为空的saltationid{get;set;}
[必需]
公共虚拟称呼称呼{get;set;}
公共虚拟字符串FirstName{get;set;}
[显示名称(“姓氏”)]
公共虚拟字符串LastName{get;set;}
}
公共部分类称呼
{
公共虚拟长Id{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟字符串状态{get;set;}
公共虚拟ICollection人员{get;set;}
}
这是正确的吗?我仍然收到一个验证错误,上面写着“称呼是必填字段”,即使我已经输入了称呼

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


如果我有时间思考,不赶在最后期限之前,我会自己解决这个问题。奇怪的是,压力会对你的大脑产生什么影响。

简短回答:问题在于你在致意时需要验证的地方

您的称呼验证属性应该放在
称呼模型


编辑:此外,您的模型还在每个属性上使用
public virtual
access修饰符。如果我的模型不需要虚拟的,我会删除它。

@ElYusubov是正确的,但是:
Person.saltationid
不应该为
null

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

这意味着每个
对象都必须有一个有效的
称呼ID
,这反过来意味着数据库中有一个相关的
称呼
记录。

噢,该死!我不能直接思考。谢谢我做这些事情已经有两年了。只是因为我很忙,所以根本无法思考。非常感谢。如果我不需要代理的话,删除虚拟代理是一个很好的观点。性能方面。谢谢。@WaterCoolerv2,没问题,谢谢。我同意。在很多限制条件下工作。不能对数据库做任何事情。db不是最好的。我提出了一个非常简化的模型。我真的在和一个可怕的db一起工作。