You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C# .NET Core向MongoDB插入对象失败求助

解决.NET Core向MongoDB插入数据时的CallContext加载错误

这个问题我之前帮同事排查过,根源很明确:你用的MongoDB .NET驱动版本和.NET Core环境不兼容。System.Runtime.Remoting.Messaging.CallContext是仅属于.NET Framework的API,在.NET Core/.NET 5+里已经被移除了,旧版驱动会尝试调用这个不存在的类型,自然就抛出了加载错误。

下面是具体的解决步骤和代码优化建议:

1. 升级MongoDB驱动到兼容.NET Core的版本

首先要确保你安装的是支持.NET Core的MongoDB驱动版本(建议2.10及以上,最新稳定版更好)。你可以通过NuGet包管理器操作,或者用.NET CLI命令:

# 先卸载旧版(如果已安装)
dotnet remove package MongoDB.Driver
# 安装最新稳定版
dotnet add package MongoDB.Driver

注意:要保证MongoDB.Driver、MongoDB.Bson、MongoDB.Driver.Core这三个包的版本一致,避免版本冲突。

2. 优化你的代码(可选但推荐)

你的代码逻辑本身没问题,但有几个可以优化的点,能让它更符合.NET Core的最佳实践:

修正数据库连接类(单例化MongoClient)

MongoClient是线程安全的,重复创建实例会浪费资源,改成单例模式更高效:

public class DatabaseConnection {
    // 静态单例实例,仅初始化一次
    private static readonly IMongoClient _mongoClient;
    private static readonly IMongoDatabase _database;

    static DatabaseConnection() {
        string connectionString = "mongodb://localhost:27017";
        _mongoClient = new MongoClient(connectionString);
        _database = _mongoClient.GetDatabase("FlourishDB");
    }

    public IMongoDatabase GetDatabase() {
        return _database;
    }
}

优化扩展方法(避免强制类型转换)

原来的扩展方法用Object作为参数,强制转换有类型安全风险,改成直接针对Company类型更稳妥:

public static class DatabaseExtensions {
    public static void AddIntoDatabase(this Company company) {
        try {
            IMongoCollection<Company> companyCollection = new DatabaseConnection().GetDatabase().GetCollection<Company>("Company");
            companyCollection.InsertOne(company);
        } catch(Exception e) {
            // 打印完整错误信息,方便后续排查
            Console.WriteLine($"插入失败:{e.Message}\n详细堆栈:{e.StackTrace}");
        }
    }
}

控制台代码保持不变(或微调)

static void Main(string[] args) {
    var company = new Company { AccountNumber = "101010" };
    company.AddIntoDatabase();
    Console.WriteLine("Completed successfully");
    Console.ReadLine();
}

最后验证

做完上面的步骤后,重新编译运行你的程序,应该就能正常插入数据到MongoDB了。如果还有问题,可以先检查MongoDB服务是否正常运行,连接字符串是否正确。

内容的提问来源于stack exchange,提问作者Wade Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:08:53