zoukankan      html  css  js  c++  java
  • EF框架学习(6)---EF中的在线场景保存数据

     

    在线场景中保存数据

    在线场景中保存实体数据是一项相当容易的任务,因为使用的是同一个context,这个context会自动跟踪所有实体发生的更改。

    下图说明了在线场景中的CUD(创建,更新,删除)操作。


    EF在调用context.SaveChange方法时,根据EntityState进行添加、修改或删除实体实例,并执行INSERT,UPDATE和DELETE语句。在线场景中,context跟踪所有实体的实例,EntityState无论何时创建,修改或删除实体,它都会自动为每个实体设置适当的实例。

    1.插入数据

    使用DbSet.Add方法将新实体添加到上下文(context),调用context.SaveChanges()方法时在数据库中插入新记录。

    复制代码
    using (var context = new SchoolDBEntities())
    {
        var std = new Student()
        {
            FirstName = "Bill",
            LastName = "Gates"
        };
        context.Students.Add(std);
    
        context.SaveChanges();
    }
    复制代码

    在上面的示例中,context.Students.Add(std)将新创建的Student实体实例,这个新实例的EntityState 为Added。调用context.SaveChanges()方法时数据库构建并执行以下INSERT语句。

    复制代码
    exec sp_executesql N'INSERT [dbo].[Students]([FirstName], [LastName])
    VALUES (@0, @1)
    SELECT [StudentId]
    FROM [dbo].[Students]
    WHERE @@ROWCOUNT > 0 AND [StudentId] = scope_identity()',N
    ''@0 nvarchar(max) ,@1 nvarchar(max) ',@0=N'Bill',@1=N'Gates'
    go
    复制代码

    2.更新数据

    在线场景中,EF API会跟踪上下文中所有实体。因此,在编辑实体数据时,EF会自动标记EntityState为Modified,在调用SaveChanges()方法时在数据库中生成并执行更新的语句。

    using (var context = new SchoolDBEntities())
    {
        var std = context.Students.First<Student>(); 
        std.FirstName = "Steve";
        context.SaveChanges();
    }

    我们使用从数据库中检索第一个学生:context.Students.First<student>()。一旦我们修改了FirstName,上下文就会将实例的EntityState设置为Modified。当我们调用该SaveChanges()方法时,会在数据库中构建并执行以下Update语句。

    exec sp_executesql N'UPDATE [dbo].[Students]
    SET [FirstName] = @0
    WHERE ([StudentId] = @1)',
    N'@0 nvarchar(max) ,@1 int',@0=N'Steve',@1=2
    Go

    在更新语句中,EF API通过主键找到要修改的实例,修改时仅包含修改的属性,其他属性将被忽略。在上面的示例中,仅FirstName编辑了属性,因此update语句中只包含FirstName列。

    3.删除数据

    DbSet.Remove()方法用于删除数据库表中的记录。

    using (var context = new SchoolDBEntities())
    {
        var std = context.Students.First<Student>();
        context.Students.Remove(std);
        context.SaveChanges();
    }

    context.Students.Remove(std)将std实体对象标记为Deleted。因此,EF将在数据库中构建并执行以下DELETE语句。

    exec sp_executesql N'DELETE [dbo].[Students]
    WHERE ([StudentId] = @0)',N'@0 int',@0=1
    Go

    通过上边的例子可以看出,在线场景中添加,更新或删除中的数据非常容易。

  • 相关阅读:
    将Linux下python默认版本切换成替代版本
    ubuntu下卸载python2和升级python3.5
    Linux下安装theano
    梯度下降法
    使用Matlab实现对图片的缩放
    matlab 中的删除文件
    解决aws ec2的centos7设置时区无效
    yum安装redis5/mq/consul
    django web应用runserver模式下cpu占用高解决办法
    N1如何完美刷入armbian系统教程
  • 原文地址:https://www.cnblogs.com/zxwDont/p/11097502.html
Copyright © 2011-2022 走看看