C# ModelState.isValid()==False+;必需的符号
我正在为我的项目使用Identity framework,并向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
用户
类添加了一些属性,如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);