【发布时间】:2018-08-15 14:42:42
【问题描述】:
我正在尝试开发具有两个主要域实体的应用程序:Entry 和 Category,我将使用 mongodb。我将有一个条目集合和一个类别集合。 Entries 集合可能有数千个文档和数百个类别。
在我看来,我想显示所有条目的信息及其类别名称和颜色。我想保留他们的类别 ID,以便在类别名称或颜色发生变化时更新受影响的条目。所以我想要一份这样的文件:
{
"_id": 123456,
"date": '2018-08-15',
"description": "Some entry description"
....
category:
{
"id": 123,
"name": "My category",
"color:" "blue"
}
问题是Category 有更多的属性,所以我的文档最终是这样的:
{
"_id": 123456,
"date": '2018-08-15',
"description": "Some entry description"
....
category:
{
"id": 123,
"name": "My category",
"color": "blue",
"otherProp": "a",
"anotherProp": "b",
"differentProp": "c"
}
}
我尝试使用BsonClassMap.RegisterClassMap 仅将Category 的某些属性映射为Entry 集合,但这似乎是不可能的。如果我忽略一些Category 属性,categories 集合也不会包含这些被忽略的项目。
我应该像下面这样处理不同的模型表示还是创建新实体来保存我想要的信息(这样我的存储库不会持久化Entry,而是会持久化EntryDataObject)?
public class Entry {
public string Description { get; set; }
...
public Category Category { get; set; }
}
public class Category {
public string Name { get; set; }
public string Color { get; set; }
}
public class CategoryExtraInformation {
public string OtherProp { get; set; }
public string AnotherProp { get; set; }
public string DifferentProp { get; set; }
public Category Category { get; set; }
}
【问题讨论】:
-
您可以使用 Mongodb 属性,例如
[Ignore]并忽略额外的属性。 api.mongodb.com/csharp/1.5/html/… -
是的,但我仍然需要一个类别集合。如果我忽略类别上的属性,这将适用于我的条目文档,但类别集合将不完整。
-
一种选择是使用自定义序列化程序,这有点痛苦,而且对于这个问题似乎有点过头了。一些稍微过时的文档,但在很大程度上仍然适用于最新版本的 C# 驱动程序:mongodb.github.io/mongo-csharp-driver/2.2/reference/bson/…
-
我刚刚发现:blog.markstarkman.com/blog/2011/09/22/… 我想它可能对我有帮助。我会试试的。