MongoDB C# 驱动程序 2.1.0 - 解析参考
MongoDB C# Driver 2.1.0 - resolve reference
我在类之间有以下关系:
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 驱动程序是如何工作的?
我通过为 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();
}
我在类之间有以下关系:
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 驱动程序是如何工作的?
我通过为 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();
}