我正在为我的项目使用Identity框架,JobExperience并向User类添加了一些属性。用户应该有加入的可能性,JobExperience他们的User。自然地,这意味着aJobExperience不能不存在而存在User。因此,我在JobExperience课堂上使用[Required]表示法JobExperience类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; }}用户类别public class User : IdentityUser{ public Boolean Available { get; set; } public Boolean ActivelySeeking { get; set; } public Boolean AcceptedUseOfData { get; set; } public int ExpectedHourlySalary { get; set;} public Boolean Gender { get; set;} public DateTime? DateOfBirth { get; set; } public String FirstName { get; set; } public string LastName { get; set; } public ICollection<JobExperience> JobExperiences { get; set; } public ICollection<Language> Languages { get; set; } public ICollection<Certificate> Certificates { get; set; }}脚手架JobExperienceController-创建方法[HttpPost][ValidateAntiForgeryToken]public ActionResult Create([Bind(Include = "JobExperienceId,Employer,DateOfEmployment,DateOfExit")] JobExperience jobExperience){ var UserId = User.Identity.GetUserId(); jobExperience.ApplicationUser = db.Users.Where(x => x.Id == UserId).First(); if (ModelState.IsValid) { db.JobExperiences.Add(jobExperience); db.SaveChanges(); return RedirectToAction("Index"); } return View(jobExperience);}添加了Required-notation后,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") { }
1 回答
aluckdog
TA贡献1847条经验 获得超7个赞
您希望将User<->之间的关系建模JobExperience为1(必需)<-> 0-N(可选列表)。通过将ApplicationUser标记为,您将无法实现此目的[Required]。而是在中配置多重性约束ModelBuilder并删除[Required]属性。
ModelBuilder.Entity<User>()
.HasMany(u => u.JobExperiences)
.WithRequired(j => j.ApplicationUser)
.WillCascadeOnDelete(true);
进一步说明,您应该引入ViewModels而不是将实体模型绑定到控制器。这样,您就不会混合用于前端验证的[Required]注释(例如)和用于数据持久化的注释(例如[ForeignKey])。
如果User继承自IdentityUser,则还请确保base.OnModelCreating(modelBuilder)在您的ModelBuilder中调用(请参见EntityType'IdentityUserLogin'未定义密钥。为此EntityType定义密钥 )。
- 1 回答
- 0 关注
- 218 浏览
添加回答
举报
0/150
提交
取消