关键词:
Entity Framework:微软官方提供的ORM工具,ORM让开发人员节省数据库访问的代码时间,将更多的时间放到业务逻辑层代码上。EF提供变更跟踪、唯一性约束、惰性加载、查询事物等。开发人员使用Linq语言,对数据库操作如同操作Object对象一样省事。
EF有三种使用场景:1. 从数据库生成Class,2.由实体类生成数据库表结构,3.  通过数据库可视化设计器设计数据库,同时生成实体类。
简单使用:
定义表
    public class Assignment
    {
        public int ID { get; set; }
        public int CourseID { get; set; }
        public int InstructorID { get; set; }
        public int Year { get; set; }
        //Navigation Property,表关系
        public Semester Semester { get; set; }
        public Instructor Instructor { get; set; }
        public Course Course { get; set; }
        public ICollection<ScoreList> ScoreLists { get; set; }
        public ICollection<ForumPost> ForumPosts { get; set; }
        public ICollection<Homework> Homeworks { get; set; }
    }
不用写额外的Annotation,ID字段自动成为主键,CourseID, InstructorID自动成为外键,值类型自动not null,空行下面的那些,EF里面叫Navigation Property,不是数据表的一部分,是多表join之后方便你直接访问join之后的部分的,表示了Entity之间的对应关系。
定义数据库上下文(这里是简单版的)
    public class MyDataContext : DbContext
    {
        public MyDataContext(DbContextOptions<MyDataContext> options)
            : base(options)
        { }
        public DbSet<Assignment> Assignments { get; set; }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Assignment>();
        }
    }
EF会自动替你分析表和表之间关系,一对多,多对多,多对一,都给你自动做好,然后级联删除也会自动给你做好,假如出现了环状的级联删除路径,你也可以手动指定级联删除的行为:
modelBuilder.Entity<Enrollment>()
    .HasOne(e=>e.Student)
    .WithMany(e=>e.Enrollments)
    .OnDelete(DeleteBehavior.Restrict);
上面啥意思呢:一个Enrollment对应一个Student,同时一个Student对应多个Enrollments,手动建立的一对多关系,然后指定OnDelete啥都不干。
增:
_context.Enrollments.Add(new Models.Enrollment {
    StudentID = id,
    AssignmentID = assignmentID
});
_context.SaveChanges();
删:
_context.Enrollments.Remove(xxxxx);
_context.SaveChanges();
查:
查分三步:
1.瞬间多表join完成
var joinedTable = _context.Applications
    .Include(a => a.Student)
    .Include(a => a.Assignment)
        .ThenInclude(a => a.Course)
    .Include(a => a.Enrollment)
        .ThenInclude(a => a.Assignment)
            .ThenInclude(a => a.Course);
Include就是A join B,ThenInclude就是A join B join C
2.瞬间用linq完成查询
    joinedTable.Where(e=>e.ID == id).OrderByDescending(e=>e.Time)
3.瞬间用匿名结构把东西送出去
var r = new
{
    CourseName = data.Course.Title,
    Homeworks = data.Homeworks.Select(e => new
    {
        Title = e.Title,
        Description = e.Content,
        StartDate = e.StartDate,
        DueDate = e.DueDate,
    }).OrderByDescending(e=>e.StartDate),
    ForumPosts = data.ForumPosts.Select(e => new
    {
        Title = e.Title,
        Content = e.Content,
        PostTime = e.PostTime
    }).OrderByDescending(e=>e.PostTime),
    ScoreList = data.ScoreLists.Select(e => new
    {
        Title = e.Title,
    }),
};
改:
直接改上面查部分中得到的实体,然后context.SaveChanges()就行了,不用构造update查询。
从头到尾没有一处操作是用拼接字符串生成的,从头到尾所有操作都支持事务回滚。瞬间觉得EF用起来好简单啊~
参考: http://www.cnblogs.com/xuf22/articles/5513283.html
https://zhuanlan.zhihu.com/p/26517319

ORM--Entity Framework 学习(01)的更多相关文章

  1. Entity Framework 学习整理(分播客整理)

    MSDN: http://msdn.microsoft.com/en-us/data/aa937723 台湾博客: http://www.dotblogs.com.tw/yc421206/ http: ...

  2. Entity Framework 学习

    Entity Framework 学习初级篇1--EF基本概况 Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry. ...

  3. Entity Framework 学习整理

    MSDN: http://msdn.microsoft.com/en-us/data/aa937723 台湾博客: http://www.dotblogs.com.tw/yc421206/ http: ...

  4. Entity Framework 学习笔记(2)

    上期回顾:Entity Framework 学习笔记(1) Entity Framework最主要的东西,就是自己创建的.继承于DbContext的类: /// <summary> /// ...

  5. Entity Framework学习笔记

    原文地址:http://www.cnblogs.com/frankofgdc/p/3600090.html Entity Framework学习笔记——错误汇总   之前的小项目做完了,到了总结经验和 ...

  6. Entity Framework 学习中级篇1—EF支持复杂类型的实现

    本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Las ...

  7. MVC5 Entity Framework学习

    MVC5 Entity Framework学习(1):创建Entity Framework数据模型 MVC5 Entity Framework学习(2):实现基本的CRUD功能 MVC5 Entity ...

  8. Entity Framework学习初级篇2

    Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager类的介绍 本节,简单的介绍E ...

  9. ADO.NET Entity Framework学习笔记(3)ObjectContext

    ADO.NET Entity Framework学习笔记(3)ObjectContext对象[转]   说明 ObjectContext提供了管理数据的功能 Context操作数据 AddObject ...

  10. MVC5 Entity Framework学习之实现主要的CRUD功能

    在上一篇文章中,我们使用Entity Framework 和SQL Server LocalDB创建了一个MVC应用程序,并使用它来存储和显示数据.在这篇文章中,你将对由 MVC框架自己主动创建的CR ...

随机推荐

  1. 201621123018《Java程序设计》第9周学习报告

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 泛型个人认为可以理解为一种模糊的类型,在里面写入各种方法,程序员可以根据需要再创建具体类型的对象,然后调用泛型 ...

  2. 计算机中的K、M、G、T到底指的是

    计算机语言是二进制数字01组成. 在计算机工作中,2的10次方用K(kilo)表示,2的20次方用M(mega)表示,2的30次方用G(giga)表示,2的40次方用T(tera)表示.因此,4K=2 ...

  3. Python上下文管理协议:__enter__和__exit__

    上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围.一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它的语 ...

  4. IIS 301重定向 报错 地址后面有eurl.axd

    错误发生的原因是当ASP.NET检测到Web站点配置为使用ASP.NET 4.0,本地ASP.NET 4.0 的组件会传递一个不能扩展的 URL到ASP.NET的管理程序作进一步处理.但是,如果一个低 ...

  5. 【原创】关于程序卸载的一个Bug

    今天解决了一个问题,程序安装目录下的某个文件不能被卸载,干净环境下不能重现,某些计算机可以重现. 解决: 这个问题里有两个文件不能被卸载 1.由程序生成的文件,如日志,即不是通过安装包安装的文件在卸载 ...

  6. 通过超链接启动App

    问题:微信里分享一个链接给你,你点击这个链接,一.如果你安装了这个钱包,那就直接打开钱包.二.如果没有安装钱包就跳转到下载钱包的地方 要点:首先要让浏览器知道 app 是谁,然后再让浏览器调用app ...

  7. cmd生成文件目录tree

    一.生成 目录tree 到 控制台 有时候需要快速生成一个文件夹中所有成员的 目录tree,可以通过 cmd命令直接生成 命令:tree /f 二.生成 目录tree 到 指定文件 如果想讲目录树生成 ...

  8. vector源码1(参考STL源码--侯捷):源码

    vector源码1(参考STL源码--侯捷) vector源码2(参考STL源码--侯捷) vector源码(参考STL源码--侯捷)-----空间分配导致迭代器失效 vector源码3(参考STL源 ...

  9. jQuery ajax请求错误返回status 0和错误error的问题

    上周发现一个jQuery ajax请求错误返回status 0和错误error的问题,responseText是"error",状态码是0而不是200: $.ajax({ type ...

  10. piplinedb 安装配置

    piplinedb不能使用root用户操作,提前建好用户 [root@yzh-jkb-privatization /]# useradd steven [root@yzh-jkb-privatizat ...