博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Entity Framework 6 Recipes 2nd Edition(13-1)译 -> 优化TPT继承模型的查询
阅读量:5845 次
发布时间:2019-06-18

本文共 1425 字,大约阅读时间需要 4 分钟。

问题

你想提高在一个TPT继承模型里的查询

解决方案

让我们假设有一个简单的TPT继承模型,如图Figure 13-1

Figure 13-1. A simple Table per Type inheritance model for Salaried and Hourly employees

 

你想从这个模型里查询一个指定的employee.为了提高查询性能,当你知道这个employee的具体类型时,就用OfType<T>()操作符来指定结果的实体的类型,如代码Listing 13-1所示:

 

Listing 13-1. Improving the Performance of a Query Against a Table per Type Inheritance Model When You Know the Entity Type

 

using (var context = new EFRecipesEntities())

            {

                context.Employees.Add(new SalariedEmployee

                {

                    Name = "Robin Rosen",

                    Salary = 89900M

                });

                context.Employees.Add(new HourlyEmployee

                {

                    Name = "Steven Fuller",

                    Rate = 11.50M

                });

                context.Employees.Add(new HourlyEmployee

                {

                    Name = "Karen Steele",

                    Rate = 12.95m

                });

                context.SaveChanges();

            }

            using (var context = new EFRecipesEntities())

            {

                // 一个典型的查询实体的方式

                var emp1 = context.Employees.Single(e => e.Name == "Steven Fuller");

                Console.WriteLine("{0}'s rate is: {1} per hour", emp1.Name,

                ((HourlyEmployee)emp1).Rate.ToString("C"));

                // 如果知道实体的类型为HourlyEmployee,下列的方式更有效率

                var emp2 = context.Employees.OfType<HourlyEmployee>()

                .Single(e => e.Name == "Steven Fuller");

                Console.WriteLine("{0}'s rate is: {1} per hour", emp2.Name,

                emp2.Rate.ToString("C"));

            }

 

输出结果如下:

Steven Fuller's rate is: $11.50 per hour

Steven Fuller's rate is: $11.50 per hour

它是如何工作的

关键是在TPT继承模型里告诉EF查询所期望的目标实体的具体类型,这样EF就能为基类或派生类查询对应的表.如果没有告诉EF查询所期望的类型信息,EF必须把基类和派生类里表的结果都查询出来,然后检测适应的类型来实例化实体,依据你模型的派生类的数量和复杂度,可能产生更多的额外工作.当然,优化的前提是你要确切地知道查询所要返回的具体类型.

转载地址:http://pyqcx.baihongyu.com/

你可能感兴趣的文章
使用VMware安装CentOS7详请
查看>>
Ember.js 3.9.0-beta.3 发布,JavaScript Web 应用开发框架
查看>>
python标准库00 学习准备
查看>>
4.2. PHP crypt()
查看>>
Winform开发框架之附件管理应用
查看>>
软链接文件和硬链接文件
查看>>
Spring Cloud Config服务器
查看>>
commonservice-config配置服务搭建
查看>>
连接池的意义及阿里Druid
查看>>
ComponentOne 2019V1火热来袭!全面支持 Visual Studio 2019——亮点之WinForm篇
查看>>
全面的Spring Boot配置文件详解
查看>>
如何优雅地玩转分库分表
查看>>
Python递归函数与匿名函数
查看>>
我的友情链接
查看>>
CentOS添加永久静态路由
查看>>
mysql多实例的安装以及主从复制配置
查看>>
loadrunner安装运行一步一步来(多图)
查看>>
git请求报错 401
查看>>
动态追踪技术(四):基于 Linux bcc/BPF 实现 Go 程序动态追踪
查看>>
Cyber-Security: Linux 容器安全的十重境界
查看>>