如何使用数据库第一种方法和多对多关系在数据库中插入数据 [英] how to insert data in database using database first approach and many to many relationship

查看:235
本文介绍了如何使用数据库第一种方法和多对多关系在数据库中插入数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个表studentmaster和subject他们有很多2个很多关系: -



我的表结构是: -

< pre lang =xml>如何从mvc控制器在这些表中插入数据

这是studentmaster.cs

公共部分班级学生
{
public studentmaster()
{
this.subjects = new HashSet < subject > ();
}

public int studentid {get;组; }
public string studentname {get;组; }
public Nullable < System.DateTime > dob {get;组; }
public Nullable < int > registrationnumber {get;组; }

public virtual ICollection < subject > subject {get;组; }
}
这是subject.cs

使用System;使用System.Collections.Generic;

公共部分类主题
{
公共主题()
{
this.studentmasters = new HashSet < studentmaster > ();
}

public int subjectid {get;组; }
public string subjectname {get;组; }

公共虚拟ICollection < studentmaster > studentmasters {get;组; }
}
使用System的Model3.context.cs

;
使用System.Data.Entity;
使用System.Data.Entity.Infrastructure;

公共部分班学生实力:DbContext
{
public studentEntities():base(name = studentEntities)
{
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}

public DbSet < studentmaster > studentmasters {get;组; }
public DbSet < subject > 科目{get;组; }
public DbSet < sysdiagram > sysdiagrams {get;组; }
}

解决方案

正如Kschuler正确指出的那样,你应该有3个表Student,Subject和StudentSubject。

EF不生成StudentSubject表,因为EF使用导航属性实现多对多关系,而不像数据库那样需要添加另一个表。



  public   static   void  InsertDAL()
{
使用 var db = new MeenaEntities())
{
// 添加示例学生数据
db.Students.Add( new 学生{StudentId = 1 ,StudentName = StudentName1 ,Dob = Convert.ToDateTime( 01-Apr-1990),RegistrationNumber = 1111 });
db.Students.Add( new 学生{StudentId = 2 ,StudentName = StudentName2,Dob = Convert.ToDateTime( 1991年4月1日),RegistrationNumber = 1234 });
// 添加样本主题数据
var subject1 = new 主题{SubjectId = 1 ,SubjectName = Subject1};
var subject2 = new 主题{SubjectId = 2 ,SubjectName = Subject2};
var subject3 = new 主题{SubjectId = 3 ,SubjectName = Subject3};
var subject4 = new 主题{SubjectId = 4 ,SubjectName = Subject4};
db.Subjects.Add(subject1);
db.Subjects.Add(subject2);
db.Subjects.Add(subject3);
db.Subjects.Add(subject4);
db.SaveChanges();
// 现在,如果您想将学生1的科目1和科目3插入StudentSubject表
var student1 = db.Students.Where(w = > w.StudentId == 1 )。FirstOrDefault();

student1.Subjects.Add(subject1);
student1.Subjects.Add(subject3);
db.SaveChanges();

}
}


I am having 2 table studentmaster and subject they have many 2 many relationship :-

My table structure is :-

How can i insert data in these table from mvc controller

This is studentmaster.cs

public partial class studentmaster
    {
        public studentmaster()
        {
            this.subjects = new HashSet<subject>();
        }

    public int studentid { get; set; }
    public string studentname { get; set; }
    public Nullable<System.DateTime> dob { get; set; }
    public Nullable<int> registrationnumber { get; set; }

    public virtual ICollection<subject> subjects { get; set; }
}
This is subject.cs

using System; using System.Collections.Generic;

public partial class subject
{
    public subject()
    {
        this.studentmasters = new HashSet<studentmaster>();
    }

    public int subjectid { get; set; }
    public string subjectname { get; set; }

    public virtual ICollection<studentmaster> studentmasters { get; set; }
}
This Model3.context.cs

using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;

public partial class studentEntities : DbContext
{
    public studentEntities() : base("name=studentEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public DbSet<studentmaster> studentmasters { get; set; }
    public DbSet<subject> subjects { get; set; }
    public DbSet<sysdiagram> sysdiagrams { get; set; }
}

解决方案

As pointed out correctly by Kschuler you should have 3 tables Student,Subject and StudentSubject.
EF doesn't generate StudentSubject table as for EF they implement many to many relationship by using navigation property unlike Database where you need to add another table.

public static void InsertDAL()
       {
           using (var db= new MeenaEntities())
           {
              //Add sample Students data
               db.Students.Add(new Student { StudentId = 1, StudentName = "StudentName1", Dob = Convert.ToDateTime("01-Apr-1990"), RegistrationNumber = 1111 });
               db.Students.Add(new Student { StudentId = 2, StudentName = "StudentName2", Dob = Convert.ToDateTime("01-Apr-1991"), RegistrationNumber = 1234 });
               //Add sample Subject data
               var subject1=new Subject { SubjectId = 1, SubjectName = "Subject1" };
               var subject2 = new Subject { SubjectId = 2, SubjectName = "Subject2" };
               var subject3 = new Subject { SubjectId = 3, SubjectName = "Subject3" };
               var subject4 = new Subject { SubjectId = 4, SubjectName = "Subject4" };
               db.Subjects.Add(subject1);
               db.Subjects.Add(subject2);
               db.Subjects.Add(subject3);
               db.Subjects.Add(subject4);
               db.SaveChanges();
               // now if you want to insert subject 1 and subject 3 for student 1 into StudentSubject Table
               var student1 = db.Students.Where(w => w.StudentId == 1).FirstOrDefault();

               student1.Subjects.Add(subject1);
               student1.Subjects.Add(subject3);
               db.SaveChanges();

           }
       }


这篇关于如何使用数据库第一种方法和多对多关系在数据库中插入数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆