У меня сработало следующее:
public class MongoCacheStore
{
public void RegisterClass<T>() where T : class, ICacheable
{
BsonClassMap.RegisterClassMap<T>(cm =>
{
cm.AutoMap();
cm.MapIdProperty("CacheId");
});
}
}
Вы должны использовать MapIdProperty вместо MapIdField, потому что CacheId является свойством.
Вы имели в виду, что в интерфейсе не было установленного аксессора?
Кроме того, гораздо лучше, если вы организуете, чтобы RegisterClass вызывался только один раз, вместо того, чтобы каждый раз проверять IsClassMapRegistered. Во-первых, я не думаю, что это потокобезопасно, как написано (два потока могут получить ложное возвращение от вызова IsClassMapRegistered, и один из них потерпит неудачу при вызове RegisterClassMap).