gpt4 book ai didi

nhibernate - 我可以同时支持 Nhibernate 和 RavenDb 吗?

转载 作者:行者123 更新时间:2023-12-03 16:28:43 25 4
gpt4 key购买 nike

我正在开发一个已经在 Nhibernate 上运行的应用程序,但我正在考虑使用 RavenDb 来处理一些我发现很难在关系数据库上实现的用例。 (例如,不使用 EAV 的动态字段)

我在 this post 上阅读了这篇推荐的文章Ayende 关于这个话题。不过,我不确定这从长远来看是否可行,以及必须支持 2 个数据库才能为我的应用程序获取动态字段时有哪些常见的陷阱。

最佳答案

在 Ayende 的链接中,他并不主张拥有两个数据库。仅仅是模式将被扩展以允许关于实体的额外元数据被存储在一个单独的表中。如果您正在谈论拥有一个混合模式的 DA 层,其中一部分转到 NHibernate,一部分转到 RavenDB,您可能会进入分布式事务领域 - 这对您来说可能是一个显着的范围增加。

您还可以考虑在您的实体表中添加一个额外的列,以允许您将一个对象序列化到其中 - 例如它可以是一个字典(您甚至可以使用 Json)。如果您以后不需要 查询多个实体,这对您来说没问题。如果您只在查看特定 实体时需要该数据,您就可以了。

我已经使用这种方法来存储用户的首选项。我不需要“找到偏好类别 X 的值为 Y 的所有用户”,我只需要说“告诉我用户 A 的所有偏好的所有值”。

编辑 - 存储 XML
对于数据库中的序列化对象,您可以使用 xml 数据类型。来自以下 msdn 的链接:-
Implementing XML in SQL Server

这最多可达 2GB,因此您不应用尽空间来存储大量动态值。该字段的流畅映射看起来像这样:-

Map(x=>x.FieldForSerializedThing).CustomType("StringClob")
.Column("[FieldForSerializedThing]")
.Not.Nullable()
.Access.CamelCaseField(Prefix.Underscore);

实体会有这样的字段:-

public virtual System.String FieldForSerializedThing
{
get { return _fieldForSerializedThing; }
set { _fieldForSerializedThing = value; }
}

我敢肯定还有其他方法可以进行序列化,但这可能会让您摆脱困境(顺便说一下,上面的示例是针对 SQL Server 的)。

关于nhibernate - 我可以同时支持 Nhibernate 和 RavenDb 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14216813/

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