首页 > 解决方案 > 使用 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();
}

数据似乎确实以正确的方式存储在数据库中: 在此处输入图像描述

标签: c#asp.net.netmongodbpolymorphism

解决方案


推荐阅读