我正试图为学校开发一份申请,但我被困住了。我想给一个在数据库中使用多到多关系的人添加技能,所以当然在两者之间有一个表。我得到了这个错误;服务器错误在'/‘应用程序中。
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set
to an instance of an object.
Source Error:
Line 99: var Skill = new Skill { ID = Skill_ID };
Line 100: var Teacher = new Teacher { ID = Teacher_ID };
**Line 101: Skill.Teachers.Add(Teacher);**
Line 102: db.SaveChanges();
Line 103: }这是我的控制器;
// GET: MyProfile/AddkSkills/
public ActionResult AddSkills()
{
var skills = (from s in db.Skills
select s); /*new Skill { ID = s.ID, SkillName = s.SkillName });*/
var Model = new AddSkillsViewModel
{
Skills = skills.ToList(),
};
return View(Model);
}
//POST: MyProfile/AddkSkills/
[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 Skill = new Skill { ID = Skill_ID };
var Teacher = new Teacher { ID = Teacher_ID };
Skill.Teachers.Add(Teacher);
db.SaveChanges();
}
}
return RedirectToAction("MyProfile");
}增加技能形式;
<h2>AddSkills</h2>
<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>Edit1;
技能模型
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
namespace Ability_Examen_ASP.Models
{
[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; }
}
}发布于 2016-01-05 15:30:57
当您创建一个新的Skill对象时,我假设它的Teachers属性为null。您可能需要将该属性初始化为空列表(或其他什么)。
一种常见的技术是拥有Skill类的默认构造函数(等等)。自动为每个此类属性创建新集合。
例如(假设Skill和Teacher类是如何定义的):
public class Skill
{
public Skill()
{
this.Teachers = new List<Teacher>();
}
}(只需将内部部分添加到现有类中即可)。
如果您首先使用EF数据库,那么这是自动完成的,所以我假设您使用的是代码优先。
发布于 2016-01-05 15:42:44
我认为在这种情况下,创建一个连接表会更好,比如
[Table("TeacherSkills")]
public class TeacherSkill
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required]
public int TeacherID { get; set; }
[ForeignKey("TeacherID ")]
public Teacher Teacher { get; set; }
[Required]
public int SkillID{ get; set; }
[ForeignKey("SkillID")]
public Skill Skill { get; set; }
}然后,你只需把你的外键添加到老师和技能中,然后插入一个简单的新技能。
db.TeacherSkill.Add(new TeacherSkill(){TeacherID = Teacher_ID, SkillID = Skill_ID});
db.SaveChanges();https://stackoverflow.com/questions/34615293
复制相似问题