MongoDB C#Driver 2.1.0 - 解析参考

时间:2015-11-01 17:09:31

标签: c# mongodb mongodb-.net-driver

我在类之间有以下关系:

public class Person : Entity
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Project : Entity
{
    public string ProjectName { get; set; }
    public MongoDBRef Leader { get; set; }
}

我正在关注this教程,使用以下代码段从MongoDbRef解析项目负责人。不幸的是,我找不到像MongoDB的C#2.1.0驱动程序中类似于FetchDBRefAs<>()方法的东西。

var projectCollection = this.Database.GetCollection<Project>("Projects");
var query = from p in projectCollection.AsQueryable<Project>()
            select p;

foreach (var project in query)
{
    Console.WriteLine(project.ProjectName);
    if(project.Leader != null)
    {
        // can't figure this out since 
        // database.FetchDBRefAs<T>(...) is not available anymore
    }
}

有人可以向我解释一下2.1.0驱动程序的工作原理吗?

1 个答案:

答案 0 :(得分:1)

我通过为IMongoDatabase编写自己的扩展方法解决了这个问题。因此,万一其他人偶然发现这个问题,这可能会有所帮助:

public static async Task<T> FetchDBRef<T>(this IMongoDatabase database, MongoDBRef reference) where T : Entity
{
    var filter = Builders<T>.Filter.Eq(e => e.Id, reference.Id.AsString);
    return await database.GetCollection<T>(reference.CollectionName).Find(filter).FirstOrDefaultAsync();
}