如何在.Net Core模型上自定义MongoDb集合名称?

hdo*_*itc 2 mongodb .net-core asp.net-core

我找不到 MongoDb 的注释,.Net Core 模型中可以修改集合名称。在 SQL 数据库中,它将是 [Table("all_sessions")]。

我的型号名称和系列名称不同。我没有更改型号或系列名称。

public class Session
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        [BsonElement("_id")]
        public string Id { get; set; }

        [BsonElement("expires")]
        public string Expires { get; set; }

        [BsonElement("session")]
        public string Session { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

我的集合名称是 all_sessions。我希望使用 all_sessions 集合获得工作会话模型。

小智 5

所以前段时间我遇到了类似的问题,并且我创建了自己的该模式的实现。

所以第一部分是创建自定义属性:

[AttributeUsage(AttributeTargets.Class, Inherited = false)]
public class BsonCollectionAttribute : Attribute
{
    private string _collectionName;
    public BsonCollectionAttribute(string collectionName)
    {
        _collectionName = collectionName;
    }
    public string CollectionName => _collectionName;
}
Run Code Online (Sandbox Code Playgroud)

第二部分是通过反射获取该属性的值

private static string GetCollectionName()
{
    return (typeof(T).GetCustomAttributes(typeof(BsonCollectionAttribute), true).FirstOrDefault()
        as BsonCollectionAttribute).CollectionName;
}
Run Code Online (Sandbox Code Playgroud)

我在存储库类中执行此操作,因此 mthat 类中的示例方法如下所示:

        public async Task InsertOne(T model)
        {
            var collectionName = GetCollectionName();
            var collection = Database.GetCollection<T>(collectionName);
            await collection.InsertOneAsync(model);
        }
Run Code Online (Sandbox Code Playgroud)

最后我的模型看起来像:

[BsonCollection("Users")]
public class User
{
    [BsonId]
    [BsonElement("id")]
    [BsonRepresentation(BsonType.String)]
    public Guid Id { get; set; }

    [BsonElement("name")]
    public string Name { get; set; }
    [BsonElement("email")]
    public string Email { get; set; }
    [BsonElement("password")]
    public string Password { get; set; }
Run Code Online (Sandbox Code Playgroud)

希望我有所帮助;)