码迷,mamicode.com
首页 > 其他好文 > 详细

EF中的实体类型(EF基础系列篇6)

时间:2015-09-12 16:05:32      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

EF中有两种类型的实体:POCO Entity和dynamic proxy entity。

POCO Entity (Plain Old CLR Object)

POCO class是一个类,它不依赖任何.NET framework的基类,它就像任何其他的普通类一样,这也是为什么被称之为“Plain Old CLR Object”的原因;

这些由实体数据模型生成的POCO实体支持大多数的增删查改的功能。下面是一个Studnet 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):

动态代理是POCO实体运行状态下的代理类,它就像POCO实体的包装类,动态包装实体支持懒加载,自动跟踪改变的特性;

一个POCO实体需要满足下面的条件,才可以成为POCO代理

1.必须定义成Public

2.不能是密封的

3.不能是抽象的;

4.导航属性必须定义成public virtual;

5.每个集合属性必须是Icollection<T>;

6.在context类中,ProxyCreationEnabled 这个选项必须不能是false(默认是true);

下面的POCO Student实体满足了上面的条件,它将会在运行的时候成为动态代理实体;

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; }
        }
        

注意:动态代理默认是对每个实体都是有效的,然而你可以手动禁止动态代理,通过在上下文类中设置ProxyCreationEnabled 这个选项为false,而达到目的;

context.Configuration.ProxyCreationEnabled=false;

在运行的时候Student POCO实体就会变成代理类:

技术分享

代理类有两个属性,一个标量属性,一个是导航属性,

标量属性实际值包含在实体中,例如Student实体有标量属性StudentID和StudentName,这和数据库中字段一致;

导航属性指向另外相关联的实体,Student实体有一个Standard属性作为导航属性,可以保证程序从一个Student导航到相关联的standard实体。

 

EF中的实体类型(EF基础系列篇6)

标签:

原文地址:http://www.cnblogs.com/caofangsheng/p/4803107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!