实体框架表每种类型的性能

2024-04-11

所以事实证明,我是最后一个在实现 TPT(每个类型的表)继承时发现 Microsoft 实体框架中存在的基本层的人。

构建了一个包含 3 个子类的原型,基表/类由 20 多列组成,子表由约 10 列组成,一切都运行良好,我继续研究应用程序的其余部分,证明了这个概念。现在是时候添加其他 20 个子类型了,OMG,我刚刚开始查看在简单选择上生成的 SQL,即使我只对访问基类上的字段感兴趣。

这一页 http://samscode.com/index.php/2010/01/the-entity-framework-v1-and-v4-deal-breaker-tpt-inheritance/对问题有精彩的描述。

有没有人使用 TPT 和 EF 投入生产?any解决方法意味着我不必: a) 将模式转换为 TPH(这违背了我试图通过数据库设计实现的一切 - urrrgghh!)? b) 用另一个 ORM 重写?

在我看来,我应该能够从 EF 内添加对存储过程的引用(可能使用 EFExtensions),该存储过程的 TSQL 仅选择我需要的字段,甚至使用 EF 为怪物 UNION 生成的代码SP 内的 /JOIN 会阻止每次调用时生成 SQL - 这不是我想要做的事情,但你明白了。

我发现的杀手是,当我选择链接到基表的实体列表(但我选择的实体不是子类表)时,我想按基表的 pk 进行过滤,我愿意.Include("BaseClassTableName")让我可以使用过滤x=>x.BaseClass.PK == 1并访问其他属性,它也在这里执行母 SQL 生成。

我无法使用 EF4,因为我仅限于安装了 3.5 SP1 的 .net 2.0 运行时。

有没有人有摆脱困境的经验?


这似乎有点混乱。您正在谈论 TPH,但是当您说:

在我看来,我应该能够从 EF 内添加对存储过程的引用(可能使用 EFExtensions),该存储过程的 TSQL 仅选择我需要的字段,甚至使用 EF 为怪物 UNION 生成的代码SP 内的 /JOIN 会阻止每次调用时生成 SQL - 这不是我想要做的事情,但你明白了。

嗯,这就是每个具体类的表映射(使用过程而不是表,但映射仍然是 TPC...)。 EF 支持 TPC,但设计者不支持。如果您获得了 CTP,则可以采用代码优先的方式进行操作 http://weblogs.asp.net/manavi/archive/2011/01/03/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and-choosing-strategy-guidelines.aspx.

如果您限制查询,您首选的使用过程的解决方案将导致性能问题,如下所示:

var q = from c in Context.SomeChild
        where c.SomeAssociation.Foo == foo
        select c;

数据库优化器无法看透过程实现,因此您可以获得结果的完整扫描。

因此,在您告诉自己这将修复您的结果之前,请仔细检查该假设。

请注意,您始终可以指定自定义 SQLany映射策略ObjectContext.ExecuteStoreQuery http://msdn.microsoft.com/en-us/library/dd487208.aspx.

然而,在执行任何操作之前,请考虑一下,正如 RPM1984 指出的那样,您的设计似乎过度使用了继承。我喜欢这句话来自NHibernate 实际应用 http://neverindoubtnet.blogspot.com/2009/04/entity-framework-inheritance.html

[A]问问自己,将继承重新建模为对象模型中的委托是否会更好。由于与持久性或 ORM 无关的各种原因,通常最好避免复杂的继承。 [您的 ORM] 充当对象模型和关系模型之间的缓冲区,但这并不意味着您在设计对象模型时可以完全忽略持久性问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架表每种类型的性能 的相关文章

  • SQL Server 将 SP_EXECUTESQL 识别为对象而不是过程名称

    我在用DBContext Database SqlQuery
  • 在程序集“SMSApp”中发现了不止一种迁移配置类型。指定要使用的名称

    我正在使用代码优先方法开发 mvc 5 应用程序 我面临一个问题 第一次当我尝试下面的命令时 它起作用并在该数据库中生成表 但是当我更改了更多类 然后尝试前两个查询时 它在这种情况下有效 但是当我尝试第三个命令时 它给了我这条消息 Firs
  • 从继承的受保护 Java 字段创建公共访问器

    我怎样才能完成以下工作 class Foo extends javax swing undo UndoManager increase visibility works for method override def editToBeUnd
  • 理解@property装饰器和继承[重复]

    这个问题在这里已经有答案了 这里是 Python 3 以防万一它很重要 我试图正确理解如何实现继承 property使用 我已经搜索了 StackOverflow 并阅读了大约 20 个类似的问题 但无济于事 因为他们试图解决的问题略有不同
  • 如何从实体框架 6 中的 Auditlog 实体获取 id

    我知道那里有几个类似的帖子 但我找不到任何解决此问题的帖子 我想在实体框架 6 中添加 更改或删除实体 软删除 时添加 某种 AudioLog 我已经覆盖了 SaveChanges 因为我只想为添加 修改或删除的 EntityStates
  • 方法不必要地被调用?

    我有一个 BaseActivity 它可以通过其他所有活动进行扩展 问题是 每当用户离开 暂停 活动时 我都会将音乐静音 我也不再接听电话 问题是 onPause每当用户在活动之间切换时就会被调用 这意味着应用程序不必要地静音和停止tele
  • 使用 UnitofWork 模式的 Rhino 模拟实体框架不起作用

    这是我第一次尝试这样的事情 所以希望这很简单 我创建了一个使用实体框架访问数据库的 WCF 服务 我已经实施了一个工作单元接口 以便我的服务可以使用 EF 同时仍然可测试 这是我的服务 public class ProjectService
  • 如何在控制器中使用多个 DBContext

    如何在控制器中使用多个 DBContext 我尝试以不同的方式重载构造函数 一些控制器 public C1 DBContext1 a DBContext2 b DBContext3 c public C1 DBContext1 a publ
  • 升级到 Visual Studio 16.3.0 后,dotnet ef 命令不再起作用

    这种情况首先发生在家里 所以我想这可能是我家里的台式电脑的问题 但现在我回到工作岗位 我尝试升级并得到了同样的结果 升级前截图 升级 Visual Studio 后的屏幕截图 我得到的错误是 无法执行 因为找不到指定的命令或文件 造成这种情
  • Python子类方法从超类方法继承装饰器

    我有一个具有retrieve 方法的超类 并且它的子类每个都实现自己的retrieve 方法 我希望每个retrieve 方法都被装饰为在收到相同参数时缓存返回值 而不必在每个子类中装饰该方法 装饰器似乎不能被继承 我可能可以调用超类的方法
  • C++中的虚继承是什么

    假设我有这样的代码 class A class B virtual public A class C virtual public A class D public B public C virtual public A If D继承B a
  • 非虚实例方法继承是如何解决的?

    通过 C 从 CLR 引用 它读起来就像call将在运行时通过 CLR 搜索由基类型定义的方法 Then callIL指令用于调用实例或虚拟 方法中 您必须指定一个引用对象的变量 方式 变量本身的类型指示定义该方法的类型 CLR 应该调用
  • Entity Framework Code First TPH 继承 - 不同的子类可以共享一个字段吗?

    我有一个使用 Entity Framework Code First 创建的实体框架模型 该模型使用每个层次结构表继承 其中结构看起来有点像这样 public abstract class BaseState public int Id g
  • Linq 在 .Substring() 上抛出异常

    我遇到了一种情况 我需要让 LINQ to Entities 查询根据字符串的长度返回一个子字符串 这是查询 var query from f in Context Files orderby f DateAdded descending
  • 将参数传递给基类构造函数

    如果基类和派生类都有带参数的构造函数 那么我们在哪里将参数传递给基类构造函数 像这样 public class DerivedClass BaseClass public DerivedClass int derivedParam Stri
  • 使用 IQueryable 进行单元测试代码

    我被要求为某些功能编写一些单元测试 但坦率地说 我不太确定这样做的必要性或有用性对于这个特殊的一段代码 我绝不试图质疑单元测试的必要性或有用性 所讨论的代码非常简单并且被大量使用 基本上它是 Skip 和 Take 扩展方法的包装 在我看来
  • VBA 中的 VSTO:AddIn.Object 有时不返回任何内容 (null)

    Given VSTO 插件 An override object RequestComAddInAutomationService 它返回一个名为的类的实例Facade在我的场景中 Excel 2007 中的 VBA 宏可访问AddIn O
  • S4 类 [(子集)带有附加参数的继承

    这是一个扩展在 R 中的访问器函数中使用 callNextMethod https stackoverflow com q 24875284 2752888 2017 03 25 更新 为了说明如何仅在加载方法时失败 但在构建的包中时不会失
  • Code First - 实体框架 - 如何公开外键

    我有以下数据对象 public class Customer System Data Entity ModelConfiguration EntityTypeConfiguration
  • EF数据库首先如何针对数据库更改更新模型?

    在班级图书馆Ado net Entity Data Model已生成 POCO 类 这些是第一次生成的 但数据库更改并未得到反映 在edmx图表右键单击并选择Update Model from Database显示新创建的表 但即使选择添加

随机推荐

  • socket.io 和express 4 个会话

    我想在我的 socket io 应用程序中访问 express 4 会话 我对 Node 不太熟悉 在实现此功能时遇到了一些麻烦 我找到了一个允许访问express 4会话的npm模块 https www npmjs org package
  • 使用 gldrawpixels 进行 opengl 旋转

    我的团队目前仅限于在 opengl 1 4 平台上绘制图像 这意味着我们无法使用任何漂亮的纹理映射来绘制图像 是的 我们仅限于使用 intel 集成图形平台 这非常烦人 到目前为止 我们能够绘制 缩放和翻转图像 但是制作图形的人声称在使用
  • React 应用程序之间可以通信吗?

    我的项目是三个 React 应用程序的旅程 我想使用从应用程序 1 到应用程序 2 以及从应用程序 2 到应用程序 3 的一些数据 如果要传递的数据很小 我会将其传递到第二个应用程序的 url 中的查询参数中 如果数据很大或私密 我计划将其
  • PHPMailer ,通过电子邮件内容与不同的接收者保持 1 个 SMTP 连接

    phpMailer New PHPMailer phpMailer gt isSMTP phpMailer gt SMTPKeepAlive true for Send your emails right away phpMailer gt
  • 如何使用 Moq 模拟 SoapException 来对错误处理进行单元测试

    我继承了一个小型控制台应用程序 用于调用 SOAP Web 服务 这是一个以各种方式记录异常的嵌套 try catch 的悲剧性混乱 我想围绕抛出 SoapException 时它的行为进行一些测试覆盖 问题 当我无法模拟接口并且无法将属性
  • 如何通过Hibernate获取数据库版本?

    有没有办法通过Hibernate 3 2 API获取底层数据库版本的一些信息 我未能在这里和 javadoc 中找到相关位 获取数据库引擎的版本是特定于实现的 这意味着没有获取版本的共享方法 因此 Hibernate 无法真正提供 API
  • 淡入时的 ScrollTop 引导框模式

    我使用 bootbox js 制作模态 但是当模态淡入并且内容太长时 滚动条会到达底部按钮的级别 当模态出现时 我需要滚动条保持在顶部 我已经解决了添加 off shown bs modal 在 bootbox dialog 之后 boot
  • 使用 webview 显示来自 sdcard 的图像不起作用

    我已经在 sdcard 根目录中下载了 map750 png 文件 但是当我尝试在带有一些文本的 Web 视图中显示它时 只显示文本 你能帮我找出代码中的错误吗 谢谢 setContentView R layout webview mWeb
  • AVPlayer audioSessionGotInterrupted 从后台唤醒时的通知

    我使用 AVAudioPlayer 来播放音频 我启用了背景音频并且音频会话配置正确 我实施了audioSessionGotInterrupted音频会话中断时收到通知的方法 这是我当前的代码 objc private func audio
  • 是否可以从 qt QColumnView 中删除预览小部件?

    我需要在 qt 视图中显示一组分层数据 我正在使用 QColumnView 来显示模型 但是 有一个功能可以使视图中的最后一列被降级为预览小部件 有可能隐藏这一点吗 例如 类似于 view setPreviewWidget NULL 尽管这
  • Python 从动态文件名导入

    我处于以下情况 我有一个 python 脚本main py 根据配置文件运行一些操作 配置文件本身就是一个 python 脚本 类 我希望能够从命令行传递不同的配置文件作为参数并将其导入主脚本中 python 中是否可以动态加载类 如果是这
  • 在运行时将 scala 3 代码从字符串解析为 Scala 3 AST

    我的目标是将 Scala 3 代码作为字符串获取 并在运行时将其解析为 Scala 3 的抽象语法树 在此过程中 如果代码存在编译错误 我应该将其作为某些异常的一部分 更大的目标是如果 scala 代码有效 则最终得到 Expr T 并通过
  • 将包裹的物品居中放置在弹性盒之间的空间中

    对于导航部分 我希望它使用space between理由 对于导航可能需要换行的较小显示器 我希望这些项目能够自行居中 而不是单独排成一行时粘在左侧 nav display flex width 100 flex flow row wrap
  • document.write() 会造成什么损害? [复制]

    这个问题在这里已经有答案了 此刻发生了什么不好的事情document write 被调用 我听说过一些关于document write对 DOM 或 Javascript 库的使用产生不利影响 我面前有一个问题 我怀疑它是相关的 但无法找到
  • SQL - 合并重叠数据

    我在 SQL Server 中有一个简单的数据集 如下所示 ROW Start End 0 1 2 1 3 5 2 4 6 3 8 9 Graphically the data would appear like this 我想要实现的是折
  • C 中的非阻塞睡眠定时器

    我正在为 Windows 寻找一个很好的 C 语言非阻塞睡眠定时器 目前我正在使用sleep 10 这当然是一个阻塞计时器 另外 我希望它不消耗系统资源 就像我的睡眠计时器一样 它不使用任何我满意的 CPU 或系统资源 那么 我可以使用的最
  • Zebra iMZ320 无法理解命令 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试将标签从 Android
  • 如何将容器推送到 Google 容器注册表(无法创建存储库)

    编辑 我只是将其归咎于平台不一致 我现在已经放弃推送到 Google Cloud Container Registry 而是创建了一个 Ubuntu VM 我正在其中执行此操作 出于前面所述的原因 我也投票决定结束这个问题 并且因为这可能应
  • 如何防止加载meteor.local(使用phonegap构建ios应用程序时)

    这是我问的问题的延伸here https stackoverflow com questions 28843616 using meteor app on ipad that was deployed to remote server wi
  • 实体框架表每种类型的性能

    所以事实证明 我是最后一个在实现 TPT 每个类型的表 继承时发现 Microsoft 实体框架中存在的基本层的人 构建了一个包含 3 个子类的原型 基表 类由 20 多列组成 子表由约 10 列组成 一切都运行良好 我继续研究应用程序的其