关键词:
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. 《Python黑帽子:黑客与渗透测试编程之道》 Windows系统提权

    环境准备: pywin32的安装在第八章的键盘记录中有,这里还需要安装wmi: 在本人的32位win7上本来是没有easy_install这个命令的,这需要安装setuptools-0.6c11.wi ...

  2. 调用notify()后,当前线程执行完synchronized块中的所有代码才会释放锁

    package com.pinnet.test; public class Demo { public static void main(String[] args) { Demo demo = ne ...

  3. CSS之浏览器默认样式问题

    今天自己写css样式时,其中用到了<ul>标签,设置了一系列效果后运行,发现位置与设置有出入.chrome上打开检查项,发现<ul>标签的styles底部多了以下一段: ul, ...

  4. flask框架--cookie,session

    今天我又给大家分享一下怎么用flask框架来实现像淘宝购物车一样存储数据,并且把存储的数据删除,这个方法可以用两个方法都可以做成,一个是cookie,另一个是session. session是依赖于c ...

  5. Mysql数据引擎和系统库

    系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MySQL ...

  6. 课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 3、Python Basics with numpy (optional)

    Python Basics with numpy (optional)Welcome to your first (Optional) programming exercise of the deep ...

  7. git中多账号切换问题的解决方案(转)

    作者:知乎用户链接:https://www.zhihu.com/question/23028445/answer/416231632来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  8. Windows server2012 IIs 8 自定义日志记录

    问题: 通过CDN加速的网站,记录日志时无法追踪源IP,日志的IP都为CDN节点ip. 分析: 1.在解析记录header时,CDN实际会把源IP以其它header的形式回传,如网宿为[Cdn-Src ...

  9. c++三维静态数组的定义与作为函数的传递

    在c++中,我们可以定义三维数组,并且可以将之作为参数直接传递. 定义: #include <iostream> #include <windows.h> using name ...

  10. Windows7下无法打开chm(mk:@MSITStore:路径[cannot open the file mk@MSITstore:路径]),chm索引就关闭的解决办法

    解决方法1是: 1,右键关联chm文件的“打开方式”到\Windows\HH.exe 2,在命令行运行regsvr32 itss.dll 3,在命令行运行regsvr32 hhctrl.ocx 方法2 ...