gpt4 book ai didi

.net - 关于使用 db4o 的几个问题

转载 作者:行者123 更新时间:2023-12-03 13:33:59 25 4
gpt4 key购买 nike

我正在尝试 db4o 对象数据库,到目前为止,我非常喜欢我所看到的,但我也在 stackoverflow db4o experiences? 上阅读了这篇文章表明并非所有看起来都那么容易的事情都是容易的。

现在,我有一些关于如何在现实世界的应用程序中使用 db4o 的问题。因此,如果您有任何使用 db4o 工作的经验(尤其是在 Web 应用程序环境中),我很想听听他们的意见。

以下是我的问题:

  • 在使用 db4o 存储对象时如何管理对象身份?**
    来自 RDBMS 背景,通常每个表都有一个主键/标识列,我现在无法想象如何在 db4o 中管理对象标识。

    例如,如果我正在使用 NHibernate/mysql 并需要通过 id 查找 User 对象,我将执行 session.Load(primaryKey) ,它将通过其 PK 检索。在表定义中将 PK 定义为自动增量也很常见。
  • 由于 db4o 中没有这样的选项,我的想法是使用 Guid 结构来识别对象数据库中的一些对象。
  • 有什么工具可以查看数据库中存储的对象吗?

    db4o 世界中是否有类似 SQL Server Management Studio(可能不太复杂)的东西?我想查看 db 文件中已经存储的数据/对象。
  • 重命名域对象时你搞砸了吗?

    据我所知,当您重命名一个类时,数据库中任何以前存储的实例都无法再检索。有没有办法解决这个问题?您如何处理针对已经包含许多对象的实时数据库的更新?
  • 我可以排除保存到数据库的属性吗?

    例如,如果一个域对象持有对(无状态)服务对象的引用,那么如果域对象被持久化,那么服务对象也将被持久化,对吗?

  • 至少对我来说,将服务实例保存在数据库中似乎有点奇怪。

    您可以将服务实例排除在保存之外吗?如果再次检索域对象,如何确保服务也再次注入(inject)实例?

    最佳答案

    1) 在使用 db4o 存储对象时如何管理对象身份?
    在 db4o 中,您通常没有 id。 db4o 使用 object-identity以区分物体。所以内存中的同一个对象将是数据库的同一个对象。

    只要您不序列化对象,它就可以正常工作。但是,一旦对象被序列化/断开连接,这将不再起作用。例如在网络场景中:您将数据发送到浏览器。现在您需要稍后通过一些 id 再次识别对象。

    我认为这三个选项是可能的:
    - 使用 db4o internal id .然而,这个 id 不是永远的。对数据库进行碎片整理会更改此 ID。
    - 使用 db4o's UUIDs .但是 db4o UUID 非常大
    - 自己创建ID

    2)有一个对象管理器工具来查看数据库。然而,它在目前的状态下极为有限。在我看来,这对 db4o 来说是一个巨大的缺点。

    3)您可以创建aliases, rename classes and fields etc .但是,更改继承层次结构不起作用。然后您需要将旧数据复制到新实例。

    4) 是的。您可以将字段标记为 transient使用 .NET-NonSerialized 属性或自定义属性。

    关于.net - 关于使用 db4o 的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1620355/

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