我们为已存在的数据库创建EDM,EDM包含与数据库中表对应的实体。EF中有两种实体类型 POCO entity dynamic proxy entity

POCO Entity (Plain Old CLR Object):

POCO类是不依赖任何框架的类,它就想.net中普通的类,称作“Plain Old CLR Objects”

POCO实体类支持很多查询、添加、更新和删除行为

POCO例子

public class Student
{
public Student()
{
this.Courses = new List<Course>();
} public int StudentID { get; set; }
public string StudentName { get; set; }
public Nullable<int> StandardId { get; set; } public Standard Standard { get; set; }
public StudentAddress StudentAddress { get; set; }
public IList<Course> Courses { get; set; }
}

Dynamic Proxy (POCO Proxy):

Dynamic Proxy是运行时POCO的代理类,它就像是POCO的包装类,Dynamic Proxy允许延迟加载和自动变化跟踪

POCO满足以下条件才能成为Dynamic Proxy类

1.POCO必须是public访问

2.POCO不是密封类

3.POCO不是抽象类

4.每个导航属性必须声明为Public和virtual

5.每一个集合属性必须是ICollection<T>

6.ProxyCreationEnabled 选项必须是true

public class Student
{
public Student()
{
this.Courses = new HashSet<Course>();
} public int StudentID { get; set; }
public string StudentName { get; set; }
public Nullable<int> StandardId { get; set; } public virtual Standard Standard { get; set; }
public virtual StudentAddress StudentAddress { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}

注意:默认的,Dynamic Proxy对每个实体都是可用的,然而,可用在上下文中通过设置ProxyCreationEnabled 选项不可用

context.Configuration.ProxyCreationEnabled = false;

在运行当中,Student类型将是 System.Data.Entity.DynamicProxies.Student

从Dynamic Proxy中获取实体的真正类型

可用使用ObjectContext.GetObjectType()方法找到真正的实体类型

实体可用有两种类型属性 Scalar 和Navigation

Scalar属性是实体中真实的值,例如,Student实体中的Scalar属性 象StudentId和StudentName,这符合Student表的列

导航属性:导航属性指向另一个关联的实体,Student有Standard属性作为导航属性

最新文章

  1. 物联网平台设计心得:管中窥豹之HeartBeat
  2. MySQL 常用函数和语句笔记
  3. 15天玩转redis —— 第八篇 你不得不会的事务玩法
  4. 编写高性能Javascript代码的若干建议
  5. HDU1150 Machine Schedule
  6. c语言中的浮点数
  7. 监控web服务方法
  8. B:冷血格斗场
  9. SQL Server 查询分析器提供的所有键盘快捷方式(转)
  10. C#中有关字符串去重的解决方案
  11. malloc、calloc、realloc三者的差别
  12. LeetCode Questions List (LeetCode 问题列表)- Java Solutions
  13. js把通过图片路径生成base64
  14. Java生产者消费者
  15. Mongodb4.0副本集构建
  16. Codechef Bear and Clique Distances
  17. (转)Spring Boot(七):Mybatis 多数据源最简解决方案
  18. DeepLearning训练方法
  19. Java 的 Api 文档生成工具 JApiDocs 程序文档工具
  20. Confluence 6 创建一个主题

热门文章

  1. webservice中DateTime类型參数的传入问题
  2. 简洁的BP及RBF神经网络代码
  3. Nginx日志配置与切割
  4. Linux驱动platform
  5. 自定义WPF ListBox的选择样式
  6. c#脚本控制shader
  7. python 微信跳一跳和源码解读
  8. Pollard-Rho大整数拆分模板
  9. 【BZOJ4154】[Ipsc2015]Generating Synergy KDtree
  10. 论JavaWeb前后端分离放弃jsp