7.翻译:EF基础系列---EF中的实体类型
原文地址: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 代理类【动态代理实体类】:
- POCO 类必须要声明成Public的
- POCO类不能是密封的(sealed)
- POCO类不能是抽象的
- 每一个导航属性,必须声明为Public,Virual
- 每一个集合属性必须是ICollection<T>
- 上下文类中的 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中的实体类型的更多相关文章
- 10.翻译:EF基础系列---EF中的持久性
原文链接:http://www.entityframeworktutorial.net/EntityFramework4.3/persistence-in-entity-framework.aspx ...
- 8.翻译:EF基础系列----EF中实体的状态
原文链接:http://www.entityframeworktutorial.net/basics/entity-states.aspx 在实体的生命周期中,EF API维护着每一个实体的状态,对于 ...
- 5.翻译:EF基础系列---EF中的上下文类
原文地址:http://www.entityframeworktutorial.net/basics/context-class-in-entity-framework.aspx EF中的上下文类是一 ...
- 4.翻译:EF基础系列--EF架构
原文地址:http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx 下面的图形,展示了EF的总体架构: 让我们来 ...
- 3.翻译:EF基础系列--EF怎么工作的?
原文链接:http://www.entityframeworktutorial.net/basics/how-entity-framework-works.aspx 这里,你将会大概了解到EF是怎么工 ...
- 1.翻译:EF基础系列--什么是Entity Framework?
大家好,好久不见,EF系列之前落下了,还是打算重新整理一下. 先说说目前的打算:先简单了解一下EF基础系列-->然后就是EF 6 Code-First系列-->接着就是EF 6 DB-Fi ...
- 【Basics of Entity Framework】【EF基础系列1】
EF自己包括看视频,看MSDN零零散散的学了一点皮毛,这次打算系统学习一下EF.我将会使用VS2012来学习这个EF基础系列. 现在看看EF的历史吧: EF版本 相关版本特性介绍 EF3.5 基于数据 ...
- Java基础系列1:Java基本类型与封装类型
Java基础系列1:Java基本类型与封装类型 当初学习计算机的时候,教科书中对程序的定义是:程序=数据结构+算法,Java基础系列第一篇就聊聊Java中的数据类型. 本篇聊Java数据类型主要包括两 ...
- Entity Framework 教程——Entity Framework中的实体类型
Entity Framework中的实体类型 : 在之前的章节中我们介绍过从已有的数据库中创建EDM,它包含数据库中每个表所对应的实体.在EF 5.0/6.0中,存在POCO 实体和动态代理实体两种. ...
随机推荐
- GetParam(name)
function GetParam(name) { var match = new RegExp(name + "=*([^&]+)*", "i").e ...
- Android Studio 之 打包项目生成APK
本文以使用Android Studio打包第一个apk的角度说明,打包APK分为两步:1生成 jks 密钥:2打包生成APK. 选择“ Build ”→选择“ Generate Signed APK. ...
- 【Ubuntu】Ubuntu bug “Reached target Shutdown”
在使用 Ubuntu-16.04.3-server-amd64.iso 版本(参考官方,iso下载地址)的时候,遇到一个Ubuntu的Bug,后来查了一下,在官方看到,目前还是Unassigned: ...
- C#学习记录二:高级数据存储方式
1,结构 结构和类的区别主要在于存储和访问方式,结构是一种值 数据类型,而类是一一种引用数据类型.所谓值数据类型存储个人理解是存在堆里面的,所谓引用数据类型存储在了栈里面,相当于存储了一个指针. 结构 ...
- Linux中awk命令的简单用法
一.用例1: cat /proc/meminfo|grep "MemTotal"|awk '{print $2}' 说明,$2表示第2位,$0表示全部,如需表示$,可用$$转义.
- tomcat7配置
<?xml version='1.0' encoding='utf-8'?><!-- Licensed to the Apache Software Foundation (ASF) ...
- SqlDataAdapter概述
SqlDataAdapter是 DataSet和 SQL Server之间的桥接器,用于检索和保存数据.SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射 Fill(它 ...
- C# ListView用法
ListView是个较为复杂的控件 1.定义 把它拽进来,系统会自动在Designer.cs里添加一个 this.listView1 = new System.Windows.For ...
- 解决 ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
在/etc/hosts文件中加入下面一行内容 127.0.0.1 localhost.localdomain localhost
- sqlserver查询的结果复制到excel替换掉回车换行
从sqlserver查询统计出的结果复制到excel,如果有回车,换行 ,或回车换行 ,复制到excel显示会乱会错版,查询的时候就替换掉回车换行,复制出来就不会乱了 ) ), ),),'') fro ...