原文地址:http://www.entityframeworktutorial.net/Types-of-Entities.aspx

在Entity Framework中有两种实体类型:一种是POCO实体,另一种是动态代理实体

POCO实体【Plain Old CLR Object】

POCO实体就是一个不依赖于任何特定框架的类,它就像任何其他普通的.NET CLR类一样,这也是为什么叫做“Plain Old CLR OBject”。

EF6和EF Core都支持POCO实体。POCO实体同样被叫做persistence-ignorant objects。

POCO实体支持和EDM生成的实体类型的那样的大多数的查询、插入、更新、删除操作。下面是一个Student的POCO实体。

Dynamic Proxy Entities (POCO Proxy)【动态代理实体】

动态代理实体是一个运行时的代理类,它包装着POCO实体。动态代理实体允许lazy loading【懒加载】。

请注意:动态代理实体,仅仅在EF 6中被支持,在EF Core 2.0中不支持动态代理实体。

一个POCO实体,需要满足下面的要求,才能成为一个POCO 代理类【动态代理实体类】:

  1. POCO 类必须要声明成Public的
  2. POCO类不能是密封的(sealed)
  3. POCO类不能是抽象的
  4. 每一个导航属性,必须声明为Public,Virual
  5. 每一个集合属性必须是ICollection<T>
  6. 上下文类中的 ProxyCreationEnabled选项必须是false

下面的POCO实体满足了上面提到的所有要求,在程序运行的时候,就成为了一个动态代理类。

请注意:默认情况下,动态代理对于每个实体都是Enabled。然而,你可以关闭动态代理,通过在上下文类中,写下面的代码:context.Configuration.ProxyCreationEnabled = false;

在运行的时候,EF API 将会创建上面Student实体的代理类实例,这个Student代理实例的类型是:System.Data.Entity.DynamicProxies.Student

使用ObjectContext.GetObjectType(),来看看动态类型里面包装的类型是啥:

好了,EF的基础系列,第七篇就介绍完了。有不明白的可以留言,谢谢支持。

附录:

EF 6官方文档:  https://docs.microsoft.com/zh-cn/ef/ef6/

EF Core官方文档:https://docs.microsoft.com/zh-cn/ef/core/

7.翻译:EF基础系列---EF中的实体类型的更多相关文章

  1. 10.翻译:EF基础系列---EF中的持久性

    原文链接:http://www.entityframeworktutorial.net/EntityFramework4.3/persistence-in-entity-framework.aspx ...

  2. 8.翻译:EF基础系列----EF中实体的状态

    原文链接:http://www.entityframeworktutorial.net/basics/entity-states.aspx 在实体的生命周期中,EF API维护着每一个实体的状态,对于 ...

  3. 5.翻译:EF基础系列---EF中的上下文类

    原文地址:http://www.entityframeworktutorial.net/basics/context-class-in-entity-framework.aspx EF中的上下文类是一 ...

  4. 4.翻译:EF基础系列--EF架构

    原文地址:http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx 下面的图形,展示了EF的总体架构: 让我们来 ...

  5. 3.翻译:EF基础系列--EF怎么工作的?

    原文链接:http://www.entityframeworktutorial.net/basics/how-entity-framework-works.aspx 这里,你将会大概了解到EF是怎么工 ...

  6. 1.翻译:EF基础系列--什么是Entity Framework?

    大家好,好久不见,EF系列之前落下了,还是打算重新整理一下. 先说说目前的打算:先简单了解一下EF基础系列-->然后就是EF 6 Code-First系列-->接着就是EF 6 DB-Fi ...

  7. 【Basics of Entity Framework】【EF基础系列1】

    EF自己包括看视频,看MSDN零零散散的学了一点皮毛,这次打算系统学习一下EF.我将会使用VS2012来学习这个EF基础系列. 现在看看EF的历史吧: EF版本 相关版本特性介绍 EF3.5 基于数据 ...

  8. Java基础系列1:Java基本类型与封装类型

    Java基础系列1:Java基本类型与封装类型 当初学习计算机的时候,教科书中对程序的定义是:程序=数据结构+算法,Java基础系列第一篇就聊聊Java中的数据类型. 本篇聊Java数据类型主要包括两 ...

  9. Entity Framework 教程——Entity Framework中的实体类型

    Entity Framework中的实体类型 : 在之前的章节中我们介绍过从已有的数据库中创建EDM,它包含数据库中每个表所对应的实体.在EF 5.0/6.0中,存在POCO 实体和动态代理实体两种. ...

随机推荐

  1. 通过HttpClient4.5模拟Form表单文件上传

    public static void main(String[] args) { CloseableHttpClient httpclient = HttpClients.createDefault( ...

  2. Maven项目同时使用lib下的Jar包

    测试于:Maven 3.0.5, eclipse-jee-indigo-SR2-win32 配置步骤: 在WEB-INF下新建lib目录并加入自己的包: 右键项目 -> Build Path - ...

  3. JAVA_SE基础——26.[深入解析]局部变量与成员变量的差别

    黑马程序猿入学blog ... 假设这章节非常难懂的话应该返回去先看  JAVA_SE基础--10.变量的作用域 定义的位置上差别: 1. 成员变量是定义在方法之外,类之内的. 2. 局部变量是定义在 ...

  4. J4架构应用过程中出现的问题与解决摘录

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6369346.html sendRedirect()的页面不能用EL表达式获取参数:因为是新的request.E ...

  5. vim自动保存折叠

    我经常使用的是手工折叠方式,就是 :set foldmethod=manual vim常用的折叠命令有: zf:折叠选定的行 zo:打开折叠 zR:打开所有折叠 zM:关闭所有折叠 zd:删除折叠 我 ...

  6. Porting .Net RSA xml keys to Java

    byte[] expBytes = Base64.decodeBase64(exponentElem.getText().trim())); byte[] modBytes = Base64.deco ...

  7. HttpServletRequest对象(一)

    javaweb学习总结(十)——HttpServletRequest对象(一) 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HT ...

  8. Redis从入门到精通:初级篇(转)

    原文链接:http://www.cnblogs.com/xrq730/p/8890896.html,转载请注明出处,谢谢 Redis从入门到精通:初级篇 平时陆陆续续看了不少Redis的文章了,工作中 ...

  9. svn 命令行下常用的几个命令

    1.将文件checkout到本地目录    svn checkout path(path是服务器上的目录)    例如:svn checkout svn://192.168.1.1/pro/domai ...

  10. shell脚本read -t 超时输入测试

    [root@server0 shellStudy]# cat timeout.sh #!/bin/bash TIMEOUT=3 #超时间隔 echo "What is your name?& ...