首先,我知道这个错误消息已经存在问题,但我还没有找到任何与使用此类查询的接口相关的问题。
我目前正在尝试使用 C# 驱动程序 2.0 更新 MongoDB 实体。但是,当我尝试构建查询时出现错误(我假设它是Builders<T>.Filter.Eq(i => i.Id, entity.Id)
一些代码),我收到以下错误:
无法确定 i => i.Id 的序列化信息。
我正在尝试更新以下课程
public interface IEntity {
string Id { get; set; }
}
public interface ITrack : IEntity {
string Name { get; set; }
}
public class TrackDTO : ITrack
{
[BsonId]
public string Id { get; set; }
public string Name { get; set; }
}
然后,我使用通用 DAO 类中的以下方法使用该接口将对象保存到数据库中,以替换整个文档。请注意,在下面的示例中,T 编码为ITrack
(i.e. TrackDao = new Dao<ITrack>
)但是当对象在运行时传入时,它是一个TrackDTO
对象(这是正确的):
public async Task<T> Save(T entity)
{
// Save the entity to the collection.
ReplaceOneResult result = await _collection.ReplaceOneAsync(Builders<T>.Filter.Eq(i => i.Id, entity.Id), entity, new UpdateOptions() { IsUpsert = true });
// return the saved user object.
return entity;
}
我不知道我的 Id 属性是否IEntity
类还需要[BsonId]
属性,但如果可能的话我想避免这种情况,因为我想保留我的模型层(其中IEntity
驻留),没有任何数据库平台特定的引用。
我还尝试添加以下类映射,但也没有效果:
BsonClassMap.RegisterClassMap<TrackDTO>(cm =>
{
cm.AutoMap();
cm.MapMember(c => c.Id).SetSerializer(new StringSerializer(BsonType.ObjectId));
cm.SetIdMember(cm.GetMemberMap(c => c.Id));
});
出于同样的原因,没有[BsonId]
模型层中的属性,我不想用以下内容装饰模型类[BsonKnownTypes]
引用 DTO 对象,但是我不介意这是否需要作为类映射的一部分发生。