gpt4 book ai didi

nhibernate - NHibernate 中只读实体的背景

转载 作者:行者123 更新时间:2023-12-04 02:17:13 27 4
gpt4 key购买 nike

我在 NHibernate 引用文档 中阅读第 10 章“只读实体”如下:

http://nhibernate.info/doc/nh/en/index.html#readonly

但不幸的是我不知道为什么要使用只读实体。我想我需要一些背景知识才能理解它,例如:

1。不可变类在 C# 代码中是指“静态”类吗?让我们用代码来展示它

public class entity
{
public virtual int Id {get; }
public virtual DateTime CreatedTime
{
get;
//how about I add this becasue it should be set before session.Save()
private set;
}

}
  1. 出于性能原因使用只读实体?(无脏检查和保存内存)
  2. 只读实体不会永久保留……

任何解释都是有帮助的,非常感谢。

最佳答案

让我们澄清一下您的问题:

1) immutable classes means "static" class in C# code?

不,不可变意味着对象在创建后不能修改。这意味着无法更改所有属性值。通常你必须在你的代码中自己关心这个是否以及如何使一个对象不可变。具有 getter 和 setter 属性的普通实体是可变的,因为您可以调用 setter...一种方法是拥有一个只读支持字段,并且对象的所有属性都不会公开 setter...

在 nhibernate 的情况下,您可以使用不可变标志映射您的实体。如果您随后尝试更新已加载实例的属性,nh 可能会抛出异常。

2) use the read-only entities for performance reason?(no dirty-check and save memory)

是的,这是一个很好的理由。

例如,如果您想在应用程序的某处显示实体列表,并且您知道在 session 中从数据库加载这些实体,您不会修改和保存它们,您可以将它们作为只读加载这将让 nh 对其进行优化。

3) read-only entities will not be persisted forever ......

不知道你说的这个是什么意思?!只读实体仅表示您在数据库中拥有的内容的只读表示。 Nh 期望实例与数据库表示 100% 同步。对该实体的任何更改/更新都会使其不是只读的。

所以一般来说,它只取决于你需要什么。如果您只需要在一个 session 中对实体进行只读访问,则可以使用此功能来提高性能。否则,请勿使用。

希望这能回答您的问题。

关于nhibernate - NHibernate 中只读实体的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20793491/

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