在数据库中插入多对多数据
Inserting Many-To-Many data in a database
我正在尝试将数据添加到多对多关系。
这是我的控制器
[HttpPost]
public ActionResult AddSkillsPost()
{
int Teacher_ID = Convert.ToInt32(Session["Teacher_ID"]);
var SkillsArray = Request.Form["chk_group[]"];
if(SkillsArray != null)
{
foreach(var skill in SkillsArray)
{
int Skill_ID = Convert.ToInt32(skill);
var SkillToBeModified = (from s in db.Skills
where s.ID == Skill_ID
select new Skill { ID = s.ID, SkillName = s.SkillName, Teachers = s.Teachers });
var Teacher = (from t in db.Teachers
where t.ID == Teacher_ID
select new Teacher { ID = t.ID, FirstName = t.FirstName, LastName = t.LastName,
Email = t.Email, Campus = t.Campus, Skills = t.Skills });
SkillToBeModified.Teachers.Add(Teacher);
db.Entry(SkillToBeModified).State = EntityState.Modified;
db.SaveChanges();
}
}
return RedirectToAction("MyProfile");
}
所以我正在尝试为某项技能添加老师。但是,我对这一行有疑问
SkillToBeModified.Teachers.Add(Teacher);
我收到 错误
'IQueryable' does not contain a definition for 'Teachers' and
no extension method 'Teachers' accepting a first argument of type
'IQueryable' could be found (are you missing a using directive
or an assembly reference?)
我假设这是一个语法错误(查询有什么问题?),但我想不出正确的写法。
这是我的技能模型
[Table("Skills")]
public class Skill
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public string SkillName { get; set; }
public virtual List<Teacher> Teachers { get; set; }
public Skill()
{
this.Teachers = new List<Teacher>();
}
}
这是我的 DB 的样子
期待任何回复
编辑:表格,
<form name="addSkillsForm" action="AddSkillsPost" method="post">
@foreach (var skill in Model.Skills)
{
<input type="checkbox" name="chk_group[]" value="@skill.ID" />@skill.SkillName< br />
}
<input type="submit" value="Update Skills" />
</form>
我正在使用一个复选框表单,用户可以在其中选中多个项目,也许我没有在 POST 中正确处理它们?
如果您的数据库看起来像图片,您应该可以这样做。
[HttpPost]
public ActionResult AddSkillsPost()
{
int teacher_ID = Convert.ToInt32(Session["Teacher_ID"]);
var SkillsArray = Request.Form["chk_group[]"];
if (SkillsArray != null)
{
foreach (var skill in SkillsArray.Split(','))
{
int skill_ID = Convert.ToInt32(skill);
db.TeacherSkills.Add(new TeacherSkill() { Teacher_ID = teacher_ID, Skill_ID = skill_ID });
db.SaveChanges();
}
}
return RedirectToAction("MyProfile");
}
但是,如果您要为一项技能添加教师,那么您会这样做。
[HttpPost]
public ActionResult AddSkillsPost()
{
var teacher_ID = Convert.ToInt32(Session["Teacher_ID"]);
var SkillsArray = Request.Form["chk_group[]"];
if (SkillsArray != null)
{
var teacher = db.Teachers.Find(teacher_ID);
foreach (var skill in SkillsArray.Split(','))
{
var skill_ID = Convert.ToInt32(skill);
var skillToBeModified = db.Skills.Find(skill_ID);
skillToBeModified.Teachers.Add(teacher);
db.Entry(skillToBeModified).State = EntityState.Modified;
db.SaveChanges();
}
}
return RedirectToAction("MyProfile");
}
我正在尝试将数据添加到多对多关系。
这是我的控制器
[HttpPost]
public ActionResult AddSkillsPost()
{
int Teacher_ID = Convert.ToInt32(Session["Teacher_ID"]);
var SkillsArray = Request.Form["chk_group[]"];
if(SkillsArray != null)
{
foreach(var skill in SkillsArray)
{
int Skill_ID = Convert.ToInt32(skill);
var SkillToBeModified = (from s in db.Skills
where s.ID == Skill_ID
select new Skill { ID = s.ID, SkillName = s.SkillName, Teachers = s.Teachers });
var Teacher = (from t in db.Teachers
where t.ID == Teacher_ID
select new Teacher { ID = t.ID, FirstName = t.FirstName, LastName = t.LastName,
Email = t.Email, Campus = t.Campus, Skills = t.Skills });
SkillToBeModified.Teachers.Add(Teacher);
db.Entry(SkillToBeModified).State = EntityState.Modified;
db.SaveChanges();
}
}
return RedirectToAction("MyProfile");
}
所以我正在尝试为某项技能添加老师。但是,我对这一行有疑问
SkillToBeModified.Teachers.Add(Teacher);
我收到 错误
'IQueryable' does not contain a definition for 'Teachers' and no extension method 'Teachers' accepting a first argument of type 'IQueryable' could be found (are you missing a using directive or an assembly reference?)
我假设这是一个语法错误(查询有什么问题?),但我想不出正确的写法。
这是我的技能模型
[Table("Skills")]
public class Skill
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public string SkillName { get; set; }
public virtual List<Teacher> Teachers { get; set; }
public Skill()
{
this.Teachers = new List<Teacher>();
}
}
这是我的 DB 的样子
期待任何回复
编辑:表格,
<form name="addSkillsForm" action="AddSkillsPost" method="post">
@foreach (var skill in Model.Skills)
{
<input type="checkbox" name="chk_group[]" value="@skill.ID" />@skill.SkillName< br />
}
<input type="submit" value="Update Skills" />
</form>
我正在使用一个复选框表单,用户可以在其中选中多个项目,也许我没有在 POST 中正确处理它们?
如果您的数据库看起来像图片,您应该可以这样做。
[HttpPost]
public ActionResult AddSkillsPost()
{
int teacher_ID = Convert.ToInt32(Session["Teacher_ID"]);
var SkillsArray = Request.Form["chk_group[]"];
if (SkillsArray != null)
{
foreach (var skill in SkillsArray.Split(','))
{
int skill_ID = Convert.ToInt32(skill);
db.TeacherSkills.Add(new TeacherSkill() { Teacher_ID = teacher_ID, Skill_ID = skill_ID });
db.SaveChanges();
}
}
return RedirectToAction("MyProfile");
}
但是,如果您要为一项技能添加教师,那么您会这样做。
[HttpPost]
public ActionResult AddSkillsPost()
{
var teacher_ID = Convert.ToInt32(Session["Teacher_ID"]);
var SkillsArray = Request.Form["chk_group[]"];
if (SkillsArray != null)
{
var teacher = db.Teachers.Find(teacher_ID);
foreach (var skill in SkillsArray.Split(','))
{
var skill_ID = Convert.ToInt32(skill);
var skillToBeModified = db.Skills.Find(skill_ID);
skillToBeModified.Teachers.Add(teacher);
db.Entry(skillToBeModified).State = EntityState.Modified;
db.SaveChanges();
}
}
return RedirectToAction("MyProfile");
}