【知识积累】Entity Framework学习:POCO延迟加载

2024-08-26 01:38

本文主要是介绍【知识积累】Entity Framework学习:POCO延迟加载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

之前在公司做一个石化项目的时候,用到了POCO。以往都是直接用Entity, 通过Mapping映射进行Entity到POCO的转换,转换的POCO实体支持延迟加载,它主要是配合code first使用(Code first则是指我们先定义POCO这样的实体class,然后生成数据库),现在也可以使用 EF Power tools将已经存在的数据库反向生成poco的class。

是什么:

POCO即Plain Old CLR Object 。Entity Framework4.0为实体提供了简单传统的CLR对象支持。实体对象可以独立于EF存在,由此EF更好地支持了测试驱动开发和领域驱动设计。同时,EF仍旧可以帮助跟踪POCO实体的变化,允许延迟加载,也回自动修正对导航属性和外键的改动。

项目实践:

基本实现如下图,相信大家会很有共鸣:


首先是在数据库中执行sql语句进行建表。

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong>-- Create table
create table T_USER
(userid      NVARCHAR2(10) not null,username    NVARCHAR2(50) not null,password    NVARCHAR2(10) not null,contact_tel NUMBER,email       NVARCHAR2(50),create_date TIMESTAMP(6)
)
tablespace SYSTEMpctfree 10pctused 40initrans 1maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited);
-- Add comments to the columns 
comment on column T_USER.useridis '用户代码';
comment on column T_USER.usernameis '用户名称';
comment on column T_USER.passwordis '用户密码';
comment on column T_USER.contact_telis '联系电话';
comment on column T_USER.emailis '邮箱';
comment on column T_USER.create_dateis '创建日期';
-- Create/Recreate primary, unique and foreign key constraints 
alter table T_USERadd primary key (USERID)using index tablespace SYSTEMpctfree 10initrans 2maxtrans 255storage(initial 64Knext 1Mminextents 1maxextents unlimited);</strong></span>

在项目中新建相应的Entity类

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong> public class ApprovalProcess:BaseEntity{/// <summary>/// ID/// </summary>public int ID { get; set; }/// <summary>/// 节点名称/// </summary>public string NodeName { get; set; }/// <summary>/// 计划类型/// </summary>public string PlanType { get; set; }/// <summary>/// 状态ID/// </summary>public int StateID { get; set; }/// <summary>/// 类型ID/// </summary>public int TypeID { get; set; }}</strong></span>

新建相应的POCO类

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong> /// <summary>/// 审批过程表/// </summary>[Class(Table = "t_dps_approvalprocess", OptimisticLock = OptimisticLockMode.Version, DynamicUpdate = false)][Cache(Usage = CacheUsage.ReadWrite)][Serializable]public class ApprovalProcess{[Id(0, TypeType = typeof(int), Name = "ID", UnsavedValue = "0")][Column(1, Name = "id", NotNull = true, SqlType = "number")][Generator(2, Class = "sequence")][Param(3, Name = "sequence", Content = "s_dps_approvalprocess")]public virtual int ID { get; set; }/// <summary>/// 节点名称/// </summary>[Property(Column = "nodename")]public virtual string NodeName { get; set; }/// <summary>/// 计划类型/// </summary>[Property(Column = "plantype")]public virtual string PlanType { get; set; }/// <summary>/// 状态ID/// </summary>[Property(Column = "stateid")]public virtual int StateID { get; set; }/// <summary>/// 种类ID/// </summary>[Property(Column = "typeid")]public virtual int TypeID { get; set; }}</strong></span>
业务逻辑层方法编写(以根据审批人姓名和过程ID查询审批人信息为例)

<span style="font-family:FangSong_GB2312;font-size:18px;"><strong>  public ResultPage<Entity.ApprovalUser> QueryApprovalUserByApprovUserNameAndProcessID(Entity.ApprovalUser param, string approvalusername,int processid){try{var page = new Page<POCO.ApprovalUser>();page.PageCurrent = param.PageIndex;page.PageSize = param.PageSize;page.OrderBy = "ID";var poco = ApproveSettingDAL.QueryApprovalUserByApprovUserNameAndProcessID(page, param, approvalusername.Trim(),processid);var entity = Mapper.Map<IList<POCO.ApprovalUser>, IList<Entity.ApprovalUser>>(poco);return new ResultPage<Entity.ApprovalUser>{total = page.total,data = entity};}catch (Exception ex){throw ex;}}</strong></span>

POCO延迟加载的优势:

1)非常宽容,因为只在需要的时候加载数据,不需要预先计划;

2)可能因为数据访问的延迟而降低性能,考虑到每访问父实体的子实体时,就需要访问数据库。



这篇关于【知识积累】Entity Framework学习:POCO延迟加载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107185

相关文章

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

使用Python获取JS加载的数据的多种实现方法

《使用Python获取JS加载的数据的多种实现方法》在当今的互联网时代,网页数据的动态加载已经成为一种常见的技术手段,许多现代网站通过JavaScript(JS)动态加载内容,这使得传统的静态网页爬取... 目录引言一、动态 网页与js加载数据的原理二、python爬取JS加载数据的方法(一)分析网络请求1

golang实现延迟队列(delay queue)的两种实现

《golang实现延迟队列(delayqueue)的两种实现》本文主要介绍了golang实现延迟队列(delayqueue)的两种实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录1 延迟队列:邮件提醒、订单自动取消2 实现2.1 simplChina编程e简单版:go自带的time

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

在 PyQt 加载 UI 三种常见方法

《在PyQt加载UI三种常见方法》在PyQt中,加载UI文件通常指的是使用QtDesigner设计的.ui文件,并将其转换为Python代码,以便在PyQt应用程序中使用,这篇文章给大家介绍在... 目录方法一:使用 uic 模块动态加载 (不推荐用于大型项目)方法二:将 UI 文件编译为 python 模

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja