我正在為我的項目使用Identity框架,JobExperience并向User類添加了一些屬性。用戶應(yīng)該有加入的可能性,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-創(chuàng)建方法[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。我猜想它需要收到用戶的參考,但我不知道如何去做。當(dāng)前嘗試是所示的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條經(jīng)驗 獲得超7個贊
您希望將User<->之間的關(guān)系建模JobExperience為1(必需)<-> 0-N(可選列表)。通過將ApplicationUser標(biāo)記為,您將無法實現(xiàn)此目的[Required]。而是在中配置多重性約束ModelBuilder并刪除[Required]屬性。
ModelBuilder.Entity<User>()
.HasMany(u => u.JobExperiences)
.WithRequired(j => j.ApplicationUser)
.WillCascadeOnDelete(true);
進一步說明,您應(yīng)該引入ViewModels而不是將實體模型綁定到控制器。這樣,您就不會混合用于前端驗證的[Required]注釋(例如)和用于數(shù)據(jù)持久化的注釋(例如[ForeignKey])。
如果User繼承自IdentityUser,則還請確保base.OnModelCreating(modelBuilder)在您的ModelBuilder中調(diào)用(請參見EntityType'IdentityUserLogin'未定義密鑰。為此EntityType定義密鑰 )。
- 1 回答
- 0 關(guān)注
- 238 瀏覽
添加回答
舉報
0/150
提交
取消