将新行上传到数据库表Entity Framework

时间:2016-06-06 07:44:30

标签: c# entity-framework

最后编辑:

我的代码存在各种问题,这些问题在两个答案的评论中有所解释。最后我使用了以下代码:

using (var context = new CijferDBEntities()) 
        { 
            context.Student.Add(newStudent);
            try
            {
                context.SaveChanges();
            }
            catch (DbEntityValidationException ex)
            {
                foreach (var entityValidationErrors in ex.EntityValidationErrors)
                {
                    foreach (var validationError in entityValidationErrors.ValidationErrors)
                    {
                        Console.Write("Property: " + validationError.PropertyName + " Error: " + validationError.ErrorMessage);
                    }
                }
            }

        }

编辑:我已经解释得非常糟糕,我想知道如何将新学生(我在这里创建)插入到表dbo.Student中。

我想使用C#在数据库的表中插入一个新行。

首先我在这里定义了一名学生:

private void btnToevoegen_Click(object sender, EventArgs e)
{
        EntityVoorbeeld vb = new EntityVoorbeeld();

        string Roepnaam = txtRoepnaam.Text;
        string Voegsel = txtVoegsel.Text;
        string Achternaam = txtAchternaam.Text;
        DateTime Geboortedatum = Convert.ToDateTime(txtGeboortedatum.Text);
        string Adres = txtAdres.Text;
        string Postcode = txtPostcode.Text;
        string Woonplaats = txtWoonplaats.Text;
        string Email = txtEmail.Text;
        string Telefoon = txtTelefoon.Text;
        string Mobiel = txtMobiel.Text;

        // Create new student
        Student newStudent = new Student();
        newStudent.Roepnaam = Roepnaam;
        newStudent.voegsel = Voegsel;
        newStudent.Achternaam = Achternaam;
        newStudent.Geboortedatum = Geboortedatum;
        newStudent.Adres = Adres;
        newStudent.Postcode = Postcode;
        newStudent.Woonplaats = Woonplaats;
        newStudent.Email = Email;
        newStudent.Telefoon = Telefoon;
        newStudent.Mobiel = Mobiel;

        // Add student to table
        vb.Studenten.add(newStudent);

        vb.SaveChanges();
}
单击按钮后,我想将其插入到表中。

我使用以下代码从数据库中提取学生:

public ObservableCollection<Student> Studenten(string klas, string schooljaar)
{
        Lesgroep groep = ce.Lesgroep.SingleOrDefault(g => g.Naam == klas && g.Schooljaar == schooljaar);
        return new ObservableCollection<Student>(groep.Student.OrderBy(s => s.Achternaam).ThenBy(s => s.Roepnaam));
}

在此代码:

vb.Studenten.add(newStudent);

我将鼠标悬停在Studenten

上时出现以下错误
'CijferDB.EntityVoorbeeld.Studenten(string, string)' is a 'method', which is not valid in the given context.

原来我的DBSet丢失了,我编辑了以下内容:

public DbSet<Student> Students { get; set; }

3 个答案:

答案 0 :(得分:0)

可能存在违反约束的情况,确保没有违反主键

答案 1 :(得分:0)

总结

  1. 事实证明,OP遇到了DbEntityValidationException 是插入到时,其中一个模型字段为null 数据库中。

  2. OP中包含的DBSet Student也会导致 newStudent实例不插入数据库,因为他没有 引用他的DbContext类,而不是EntityVoorbeeld,这是正常的 不包含DbSet Student

  3. 的类

答案 2 :(得分:0)

Studenten是一种方法(您在问题上显示)。要添加新实体,您需要将其添加到您的上下文DbSet,而不是添加到ObservableCollection的方法。

您的DbContext(根据您的代码,类型EntityVoorbeeld)将具有类型为DbSet的{​​{1}}属性(带有您未提供的名称)。使用该名称添加它:

Student

在英语中,更有可能被称为vb.TheNameOfTheStudentDbSet.Add(newStudent); vb.SaveChanges(); ,因此您的Students类看起来像:

EntityVoorbeeld

但你的名字可能会有所不同。