gpt4 book ai didi

nhibernate - Fluent NHibernate : rarely used properties as Component, 还是在单独的表中?

转载 作者:行者123 更新时间:2023-12-04 01:32:34 25 4
gpt4 key购买 nike

我想知道你是否可以帮助我解决我一直在思考的问题。假设我们有一个实体。假设 endtity 有一个 ExtendedInfo 对象,它包含各种不常用的属性。

我想知道如何最好地为 FNH 构建它。我想最简单的事情就是将 UserInfo 设置为 User 实体的 Fluent Nhibernate“组件”,以便将其平面映射为 User 表中的列。

但是,由于它不经常使用,也许最好将它存储在一个单独的表中,并在需要时延迟加载它?关于如何做到这一点的最佳猜测是使用.HasOne 映射,但我不知道这是否是最佳方法。

对前往此处的最佳方式有何想法?

谢谢

最佳答案

设计问题:

将其映射为一个组件更容易处理,数据库模式变得更简单,此类的处理也更简单。

当您将其映射为多对一时,它需要一个 ID。当其他类型也在使用这个 UserInfo 时,他们需要将它存储到同一个公用表中。无论如何,您必须注意 UserInfo 的同一个实例不会被多个所有者使用。这对于组件是不可能的,你不能共享 UserInfo

性能问题:

当它被映射为一个组件时,它总是与欠类型一起加载。性能稍慢,因为它需要从磁盘读取更多数据,并且需要通过线路发送更多数据。除非此 UserInfo 包含大量数据,或者您打算存储数百万用户,否则您可能不会认出它。

当您将其映射到单独的表时,NH 使用单独的查询读取 UserInfo。你说它很少见,但如果你需要大量用户的 UserInfo,这可能会显着降低数据访问速度。您需要优化查询(获取模式 join),然后 NH 将使用内部联接读取它。这仍然比从同一张表读取它慢。

长话短说:

映射到另一个表(多对一)需要更多的工作。只有当您在不需要 UserInfos 的情况下读取 Users 时可以解决已知 (!) 性能问题时,才值得付出努力.

关于nhibernate - Fluent NHibernate : rarely used properties as Component, 还是在单独的表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1577472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com