我正在为我的项目使用Identity框架,并在JobExperience
类中添加了一些属性,例如User
。
用户应该可以在JobExperience
添加User
。当然,这意味着JobExperience
不能在没有User
的情况下存在。
因此我在JobExperience
类
JobExperience class
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; }
}
Scaffolded 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")
{
}
internal static ApplicationUserDb Create()
{
return new ApplicationUserDb();
}
}
答案 0 :(得分:2)
您希望对function validate(id) {
var valid = false;
try
{
if(id == new mongoose.Types.ObjectId(""+id))
valid = true;
}
catch(e)
{
valid = false;
}
return valid;
}
> validate(null)
false
> validate(20)
false
> validate("abcdef")
false
> validate("5ad72b594c897c7c38b2bf71")
true
&lt; - &gt;之间的关系进行建模。 User
为1(必填)&lt; - &gt; 0-N(可选列表)。您不会通过将ApplicationUser标记为JobExperience
来实现此目的。而是在[Required]
中配置多重性约束并删除ModelBuilder
属性。
[Required]
教程:Configure One-to-Many Relationships in EF 6。
另外请注意,您应该引入ViewModels,而不是将实体模型绑定到控制器。这样,您就不会混合用于前端验证的注释(例如ModelBuilder.Entity<User>()
.HasMany(u => u.JobExperiences)
.WithRequired(j => j.ApplicationUser)
.WillCascadeOnDelete(true);
)和用于数据持久性的注释(例如[Required]
)。
如果[ForeignKey]
继承自User
,请确保在模型构建器中调用IdentityUser
(请参阅EntityType 'IdentityUserLogin' has no key defined. Define the key for this EntityType
)。