Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ModelState.isValid()==False+;必需的符号_C#_Asp.net Mvc_Asp.net Identity_Modelstate - Fatal编程技术网

C# ModelState.isValid()==False+;必需的符号

C# ModelState.isValid()==False+;必需的符号,c#,asp.net-mvc,asp.net-identity,modelstate,C#,Asp.net Mvc,Asp.net Identity,Modelstate,我正在为我的项目使用Identity framework,并向用户类添加了一些属性,如JobExperience 用户应该可以在其用户中添加工作经验。当然,这意味着如果没有用户,那么工作体验就不可能存在 因此,我在我的JobExperience类中使用[Required]符号 工作经验课程 public class JobExperience { public int JobExperienceId { get; set; } public string Employer { g

我正在为我的项目使用Identity framework,并向
用户
类添加了一些属性,如
JobExperience

用户应该可以在其
用户
中添加
工作经验
。当然,这意味着如果没有
用户
,那么
工作体验就不可能存在

因此,我在我的
JobExperience
类中使用[Required]符号

工作经验课程

public class JobExperience
{
    public int JobExperienceId { get; set; }
    public string Employer { get; set; }
    public DateTime? DateOfEmployment { get; set; }
    public DateTime? DateOfExit { get; set; }
    public ICollection<Subject> Subjects { get; set; }
    [Required]
    public virtual User ApplicationUser { get; set; }
}
在添加了所需的符号后,create方法中的modelstate.isValid()返回false。我猜它需要收到对用户的引用,但我不知道该怎么做。当前尝试是所示的LINQ表达式

ApplicationUserDb

 public class ApplicationUserDb : IdentityDbContext<User>
{

    public virtual DbSet<JobExperience> JobExperiences { get; set; }
    public virtual DbSet<Language> Languages { get; set; }
    public virtual DbSet<Certificate> Certificates { get; set; }

    public ApplicationUserDb() : base("DefaultConnection")
    {

    }

    internal static ApplicationUserDb Create()
    {
        return new ApplicationUserDb();
    }

}
公共类应用程序数据库:IdentityDbContext
{
公共虚拟数据库集JobExperiences{get;set;}
公共虚拟数据库集语言{get;set;}
公共虚拟数据库集证书{get;set;}
公共应用程序数据库():基本(“默认连接”)
{
}
内部静态应用程序SERDB Create()
{
返回新的ApplicationUserDb();
}
}

您希望将
用户
工作体验
之间的关系建模为1(必需)0-N(可选列表)。如果将ApplicationUser标记为
[必需]
,则无法实现此目的。相反,在
ModelBuilder
中配置多重性约束,并删除
[Required]
属性

ModelBuilder.Entity<User>()
   .HasMany(u => u.JobExperiences)
   .WithRequired(j => j.ApplicationUser)
   .WillCascadeOnDelete(true);
ModelBuilder.Entity()
.有很多(u=>u.工作经验)
.WithRequired(j=>j.ApplicationUser)
.WillCascadeOnDelete(真);
教程:

作为进一步说明,您应该引入ViewModels,而不是将实体模型绑定到控制器。这样,您就不会混合使用用于前端验证的批注(例如
[必需]
)和用于数据持久性的批注(例如
[外键]


如果
User
继承自
IdentityUser
,也请确保调用modelBuilder中的
base.OnModelCreating(modelBuilder)
(请参阅)。

非常感谢!你的回答几乎解决了所有问题。在实施了您的解决方案之后,我得到了一个错误,即:;“EntityType'IdentityUserLogin'未定义键。请定义此EntityType的键。”。我发现这个问题的答案可以在这里找到:(见问题的第二个答案)我很乐意将你的答案标记为解决方案!也许你可以在你的回答中提到这条信息,然后我会接受它:)很高兴我能帮上忙:)非常感谢,我被困在这上面一天多了!请阅读我刚刚发送的消息,我想将您的答案标记为已接受,但我认为如果您能将我的发现添加到您的答案中,它可能会帮助更多的人。
 public class ApplicationUserDb : IdentityDbContext<User>
{

    public virtual DbSet<JobExperience> JobExperiences { get; set; }
    public virtual DbSet<Language> Languages { get; set; }
    public virtual DbSet<Certificate> Certificates { get; set; }

    public ApplicationUserDb() : base("DefaultConnection")
    {

    }

    internal static ApplicationUserDb Create()
    {
        return new ApplicationUserDb();
    }

}
ModelBuilder.Entity<User>()
   .HasMany(u => u.JobExperiences)
   .WithRequired(j => j.ApplicationUser)
   .WillCascadeOnDelete(true);