猿教程 Logo

断开状态下添加新实体

在这一章,你将学习如何在DbContext断开连接的情况下添加新实体,进而在一个数据库表中插入一个新行。

不论你是使用数据库优先(DB first)的做法创建一个实体数据模型,还是使用代码优先(Code first)或模型优先(Model first)方法创建实体类和上下文。

这几种开发法方法中的实体类和上下文类都基本类似。

在这里,我们将看到如何添加单一学生实体(实体图)。

下面是一个学生实体。

using System;
using System.Collections.Generic;
public partial class Student
{
    public Student()
    {
        this.Courses = new HashSet<Course>();
    }
    
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public Nullable<int> StandardId { get; set; }
    public byte[] RowVersion { get; set; }
    
    public virtual Standard Standard { get; set; }
    public virtual StudentAddress StudentAddress { get; set; }
    public virtual ICollection<Course> Courses { get; set; }
}

以下是一个上下文类。

public partial class SchoolDBEntities : DbContext
{
    public SchoolDBEntities()
        : base("name=SchoolDBEntities")
    {
    }
    
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
            
    }
    
    public virtual DbSet<Course> Courses { get; set; }
    public virtual DbSet<Standard> Standards { get; set; }
    public virtual DbSet<Student> Students { get; set; }
    public virtual DbSet<StudentAddress> StudentAddresses { get; set; }
    public virtual DbSet<Teacher> Teachers { get; set; }
}

下面的代码显示了如何保存一个单一的实体。

class Program
{
    static void Main(string[] args)
    {
        // create new Student entity object in disconnected scenario (out of the scope of DbContext)
        var newStudent = new Student();
        //set student name
        newStudent.StudentName = "Bill";
        //create DBContext object
        using (var dbCtx = new SchoolDBEntities())
        {
            //Add Student object into Students DBset
            dbCtx.Students.Add(newStudent);
                
            // call SaveChanges method to save student into database
            dbCtx.SaveChanges();
        }
    }
}

正如你在上面的代码片段中所看到的,首先,我们已经创建了一个newStudent实体对象并设置StudentName为“Bill”。

第二,我们已经创建了一个新的DBContext对象并添加newStudent到 EntitySet类型的Students 。

第三,我们调用DBContext方法SaveChanges 将执行以下sql操作插入到数据库中。

exec sp_executesql N'INSERT [dbo].[Student]([StudentName], [StandardId])
VALUES (@0, NULL)
SELECT [StudentID], [RowVersion]
FROM [dbo].[Student]
WHERE @@ROWCOUNT > 0 AND [StudentID] = scope_identity(),@0='Bill'

或者,我们也可以向DBContext.Entry添加实体,并手动设置该实体状态为Added,这样将与上面案例执行相同的sql:

class Program
{
    static void Main(string[] args)
    {
        // create new Student entity object in disconnected scenario (out of the scope of DbContext)
        var newStudent = new Student();
        //set student name
        newStudent.StudentName = "Bill";
        //create DBContext object
        using (var dbCtx = new SchoolDBEntities())
        {
            //Add newStudent entity into DbEntityEntry and mark EntityState to Added
            dbCtx.Entry(newStudent).State = System.Data.Entity.EntityState.Added;
            // call SaveChanges method to save new Student into database
            dbCtx.SaveChanges();
        }
    }
}

所以,通过这种方式,您可以在断开连接的情况下添加一个新的单一的实体。

在下一章中,您将学习在断开连接的场景中如何更新现有的单一的实体。



版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/entity/add-entity-in-disconnected.html