0

我有一个 MVC4 网站,我正在尝试集成一些 Mongodb 功能(现在只是试验)。我正在使用这个mongodb 项目,因为我也在尝试部署到 Azure,这个项目提供了用于连接到 mongodb 工作角色的连接实用程序。我有一个带有以下构造函数的 MovieController:

public class MovieController : Controller
    {
        MongoMovieHelper _movies;
        public MovieController()
        {
            _movies = new MongoMovieHelper();
        }
}

这反过来又调用了这个类:

 public class MongoMovieHelper
    {
        public MongoCollection<Movie> Collection { get; private set; }

        public MongoMovieHelper()
        {
            MongoServerSettings serverSettings = ConnectionUtilities.GetConnectionSettings();
            MongoServer server = MongoServer.Create(serverSettings);
            MongoDatabase db = server["movies"];
            Collection = db.GetCollection<Movie>(typeof(Movie).Name.ToLower());
        }
...

尝试从电影控制器加载任何页面时,我在 Chrome 调试器中收到内部服务器错误。

Failed to load resource: the server responded with a status of 500 (Internal Server Error) 

所以我尝试在visual studio中调试。控制器构造函数被命中,但 MongoMovieHelper 中的任何断点都没有,并且尝试 Step into 只是再次命中控制器构造函数。堆栈跟踪显示以下错误:

无法加载文件或程序集 'MongoDB.Driver, Version=1.4.2.4500, Culture=neutral, PublicKeyToken=f686731cfb9cc103' 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

以前我有另一个类建立 Mongodb 连接,所以控制器调用 MongoMovieHelper,后者调用 MongoDBHelper。在这种情况下,控制器和 MongoMovieHelper 都被调用,但 MongoDBHelper 没有,所以我相信问题出在 mongodb 连接上。

这可能是一些新手错误,但我就是不知道问题可能是什么,有什么想法吗?

4

1 回答 1

0

我尝试使用最新版本的官方 mongodb c# 驱动程序重新创建您的问题,但我做不到。

我正在使用 NuGet 上提供的最新官方驱动程序:

我更改了您的代码以使用非过时的方法来获取服务器对象:

public MongoMovieHelper()
    {
        var client = new MongoClient(MongoUrl.Create("mongodb://localhost:27017"));
        var server = client.GetServer();
        var db = server["movies"];
        Collection = db.GetCollection<Movie>(typeof (Movie).Name.ToLower());
    }

因此,如果您没有使用官方驱动程序,请使用它:

使用以下命令获取:

Install-Package mongocsharpdriver

然后尝试将您的代码更改为类似于我的代码,然后查看它是否有效。

您收到的错误表明您使用的是旧版本的官方驱动程序,或者您根本没有使用官方驱动程序。

注意:通过 nuget 控制台 (/ui) 卸载旧驱动程序,或者删除二进制 ref 并清理您的项目,确保您没有任何 bin dll。

于 2013-02-21T11:26:25.090 回答