zoukankan      html  css  js  c++  java
  • Entity Framework入门教程(6)--- 在线场景中保存数据

    在线场景中保存数据

    在线场景中保存实体数据是一项相当容易的任务,因为使用的是同一个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

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

    EF系列目录链接:Entity Franmework系列教程汇总

  • 相关阅读:
    guava快速入门
    自旋锁解决StackOverflowError案例
    Java内存模型
    Java中sleep()与wait()区别
    wait()、notify()、notifyAll()与线程通信方式总结
    同步代码块、同步方法、锁总结
    如何把Go调用C的性能提升10倍?
    记一次虚拟化环境下Windows IO性能的解析
    win7(64bit)使用mingw64配置gtkmm
    你的深度工作,决定了你的后半生(刻意练习,最主要的竞争对手是无聊)
  • 原文地址:https://www.cnblogs.com/wyy1234/p/9628263.html
Copyright © 2011-2022 走看看