相关疑难解决方法(0)

MongoDB C#驱动程序 - 如何将_id存储为ObjectId但是映射到字符串Id属性?

我无法让我的模型将实体的Id属性表示为字符串,但是将其自动生成并由MongoDb在内部表示为本机ObjectId.

class Account
{
    public string Id { get; set; }
    ...
}

class AccountStore
{
    static AccountStore()
    {
        BsonClassMap.RegisterClassMap<Account>(cm =>
        {
            cm.AutoMap();
            cm.SetIgnoreExtraElements(true);

            // map Id property here
        });
    }

    public void Save(Account account)
    {
        _accounts.Save(account);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于// map Id property here上面代码中的行,我尝试了许多不同的配置Id映射的方法,但没有一种方法有效.我尝试过的方法以及调用Save方法时抛出的相关异常是:

// Exception: No IdGenerator found.
cm.IdMemberMap
  .SetRepresentation(BsonType.ObjectId);

// Exception: No IdGenerator found.
cm.IdMemberMap
  .SetRepresentation(BsonType.String);

// Exception: Unable to cast object of type 'MongoDB.Bson.ObjectId' to type 'System.String'.
cm.IdMemberMap
  .SetRepresentation(BsonType.ObjectId) …
Run Code Online (Sandbox Code Playgroud)

c# mongodb mongodb-.net-driver

12
推荐指数
2
解决办法
7567
查看次数

使用BsonRepresentation(BsonType.ObjectId)与BsonId对比ObjectId来修饰C#中的属性之间的区别

我是mongodb的新手,我很喜欢不用担心架构的问题,我有一个问题,假设你想在mongo中使用Id属性而mongo ObjectId用来表示属性Id,到目前为止我看到你可以拥有或装饰一个Id作为如下,

public ObjectId Id {get; set;}

//or

[BsonId]
public string Id {get; set;}

//or

[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id {get; set;}
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释为什么大多数人选择最后一种类型,以及最新情况以及灵活性如何帮助.谢谢?

c# mongodb mongodb-query

9
推荐指数
1
解决办法
4130
查看次数

如何制作 ObjectId 的字符串表示形式,而不必为每个成员指定它

我将 MongoDB 与 C# 官方 MongoDb 驱动程序一起使用。

我的域对象都有一个字符串类型的 Id 属性

string Id { get; set;}
Run Code Online (Sandbox Code Playgroud)

但我想在实际数据库中存储 12 字节的二进制 ObjectId,这是在类映射中实现的,如下所示:

  BsonClassMap.RegisterClassMap<X>(cm => {
    cm.AutoMap();
    cm.GetMemberMap(c => c.Id).SetRepresentation(BsonType.ObjectId);
  });
Run Code Online (Sandbox Code Playgroud)

其他集合的外部 ObjectId 键也表示为字符串,并且也应保存为对象 ID。

现在,如果可以避免的话,我不想为每个 Id 和外键编写相同的 SetRepresenttion 内容。

那么有没有一种方法可以一劳永逸地说,所有字符串 Id 字段都应该在数据库中表示为 ObjectId,并且所有名称以“Id”结尾的字符串属性也应该在数据库中表示为 ObjectId?

c# mongodb

5
推荐指数
1
解决办法
2180
查看次数

Mongo C# 将 ObjectId 反序列化为字符串

我已经更改了所有 C# 实体:

public ObjectId Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

对此:

[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

因为我需要使用 Rebus 并发送 Id,但如果不添加自定义序列化程序,则 ObjectId 不可序列化。实际上字符串在其他地方更方便(例如:MVC 控制器中的模型绑定)。

无论如何,我认为更改不会有问题,但现在我尝试将 ObjectId 反序列化为字符串时遇到异常:我的 ApplicationUser 类有一个

IEnumerable<string> Friendships { get; set; }
Run Code Online (Sandbox Code Playgroud)

包含来自友谊实体的 Id 列表。它们是作为 ObjectId 创建的,但现在我想将它们作为字符串处理...我现在如何在代码中处理它?

string mongodb bson objectid

2
推荐指数
1
解决办法
7918
查看次数