首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# -在数据库中添加多到多个数据

c# -在数据库中添加多到多个数据
EN

Stack Overflow用户
提问于 2016-01-05 15:27:44
回答 2查看 68关注 0票数 1

我正试图为学校开发一份申请,但我被困住了。我想给一个在数据库中使用多到多关系的人添加技能,所以当然在两者之间有一个表。我得到了这个错误;服务器错误在'/‘应用程序中。

代码语言:javascript
复制
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:                }

这是我的控制器;

代码语言:javascript
复制
        // 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");
        }

增加技能形式;

代码语言:javascript
复制
<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;

技能模型

代码语言:javascript
复制
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; }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-05 15:30:57

当您创建一个新的Skill对象时,我假设它的Teachers属性为null。您可能需要将该属性初始化为空列表(或其他什么)。

一种常见的技术是拥有Skill类的默认构造函数(等等)。自动为每个此类属性创建新集合。

例如(假设SkillTeacher类是如何定义的):

代码语言:javascript
复制
public class Skill
{
    public Skill()
    {
        this.Teachers = new List<Teacher>();
    }
}

(只需将内部部分添加到现有类中即可)。

如果您首先使用EF数据库,那么这是自动完成的,所以我假设您使用的是代码优先。

票数 1
EN

Stack Overflow用户

发布于 2016-01-05 15:42:44

我认为在这种情况下,创建一个连接表会更好,比如

代码语言:javascript
复制
[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; }
}

然后,你只需把你的外键添加到老师和技能中,然后插入一个简单的新技能。

代码语言:javascript
复制
db.TeacherSkill.Add(new TeacherSkill(){TeacherID = Teacher_ID, SkillID = Skill_ID});
db.SaveChanges();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34615293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档