c# - 使用 C# 和 MongoDB 的多态性
问题描述
我第一次尝试使用 C# 使用 MongoDB,但我正在努力实现多态性。我要实现的目标的简短摘要:
- 一个项目包含多个项目
- 项目可以是目录或书签
- 目录是其他目录或书签(项目)的集合
我正在为第二部分而苦苦挣扎。我将此用作参考,但每当我尝试从数据库中获取项目时,它包含项目列表而不是书签或目录,因此忽略了书签的 Url。我还发现这个Github repo似乎完成了同样的事情,但我无法实现它,因为我已经有一个 .Find()。在我的 GetProjectByIdAsync 方法中。
任何帮助是极大的赞赏!
项目.cs:
public class Project
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public List<Item> Items { get; set; }
}
项目.cs:
[BsonIgnoreExtraElements(true)]
[BsonDiscriminator(RootClass = true)]
[BsonKnownTypes(typeof(Directory), typeof(Bookmark))]
public abstract class Item
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string Name { get; set; }}
}
目录.cs:
public class Directory: Item
{
public List<Item> Items { get; set; }
}
书签.cs:
public class Bookmark: Item
{
public string Url { get; set; }
}
项目服务.cs:
public async Task<Project> GetProjectByIdAsync(string id)
{
return await _projects.Find(project => project.Id == id).FirstOrDefaultAsync();
}
解决方案
推荐阅读
- ios - 为什么 iPhone 12 Pro 立体视频帧垂直移位?
- java - 是否可以在 Cloudsim 中计算动态阈值?
- c# - 第三者名单变更通知
- primefaces - 尽管在 primefaces p:cellEditor 中具有相同的表达式,但 h:outputText 中的 JSF2 ValueExpression 不会评估为 true
- sql-server - 如何将二进制列数据读入火花数据帧?
- c# - 将 retryPolicy 与 SqlAzureExecutionStrategy 一起使用时,避免“SqlParameter 已被另一个 SqlParameterCollection 包含”异常
- mysql - 带有'n'个条件的Mysql查询用NOT括起来
- arrays - 在 Tableview (Swaft) 上获取重复的 Firestore 文档
- typescript - TypeScript 的 Visual Studio Code 自动导入行为不一致
- azure - 增加 Kubernetes 中状态集的 PVC 大小