这个问题在 Entity Framework 或 NHibernate 等 ORM 中很容易解决,但我在 MongoDb 的 c# 驱动程序中没有看到任何现成的解决方案。假设我有 A 类型的对象的集合,它引用了 B 类型的对象,我需要将它们存储在单独的集合中,这样一旦特定的对象 B 发生更改,所有引用它的 A 都需要知道更改。换句话说,我需要规范化这个对象关系。同时,我需要在类中由 A 引用 B,而不是通过 Id,而是通过类型引用,如下所示:
public class A
{
public B RefB { get; set; }
}
我必须自己处理所有这些引用一致性吗?如果是这样,哪种方法最好使用?我是否必须在课堂上同时保留 B 的 Id 和 B 引用,并以某种方式同步它们的值:
public class A
{
// Need to implement reference consistency as well
public int RefBId { get; set; }
private B _refB;
[BsonIgnore]
public B RefB
{
get { return _refB; }
set { _refB = value; RefBId = _refB.Id }
}
}
我知道有人可能会说关系数据库最适合这种情况,我知道,但我确实必须使用像 MongoDb 这样的文档 Db,它解决了很多问题,并且在大多数情况下,我需要为我的项目存储非规范化的对象,但有时我们可能会需要在单个存储内混合设计。