2

我已经使用 MongoDb C# Driver 1.4 更新了我的项目,并且我的 Lambda 表达式之一不再工作。

在我使用 MongoDb C# Driver 1.3.1 和 Fluent Mongo 来支持 Linq 之前。

这是我的方法:

IQueryable<T> IBackend<T>.Get(System.Linq.Expressions.Expression<Func<T, bool>> expression)
{
    return collection.AsQueryable<T>().Where(expression);
}

这个 lambda 表达式有效:

var addedCustomer = repo.Get(c => c.FirstName == "Elwood").SingleOrDefault();

这个现在抛出一个异常:

var updatedCustomer = repo.Get(c => c.Id == customer.Id).SingleOrDefault();

抛出异常消息:

Object reference not set to an instance of an object.

更新这里是我的堆栈跟踪:

MongoDB.Bson.dll!MongoDB.Bson.Serialization.BsonClassMapSerializer.GetMemberSerializationInfo(string memberName) Line 253 + 0x3 bytes   C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.GetSerializationInfoMember(MongoDB.Bson.Serialization.IBsonSerializer serializer, System.Linq.Expressions.MemberExpression memberExpression) Line 962 + 0xc bytes    C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.GetSerializationInfo(MongoDB.Bson.Serialization.IBsonSerializer serializer, System.Linq.Expressions.Expression expression) Line 888 + 0xf bytes  C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.GetSerializationInfo(System.Linq.Expressions.Expression expression) Line 880 + 0xf bytes C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.BuildComparisonQuery(System.Linq.Expressions.BinaryExpression binaryExpression) Line 433 + 0x1f bytes    C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.BuildQuery(System.Linq.Expressions.Expression expression) Line 768 + 0x37 bytes  C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.BuildQuery() Line 113 + 0xc bytes    C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.SelectQuery.Execute() Line 122 + 0x9 bytes   C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.MongoQueryProvider.Execute(System.Linq.Expressions.Expression expression) Line 147 + 0xb bytes   C#
MongoDB.Driver.dll!MongoDB.Driver.Linq.MongoQueryProvider.Execute<Lion.Tools.Tests.Backends.Entities.Customer>(System.Linq.Expressions.Expression expression) Line 131 + 0xc bytes  C#
[External Code] 
Lion.Tools.Tests.dll!Lion.Tools.Tests.Backends.MongoDbBackendTests.MongoDb_Can_Add_Select_And_Update_Test() Line 79 + 0x27f bytes   C#
[External Code] 

知道出了什么问题吗?

谢谢

4

3 回答 3

6

C# 驱动程序的 1.4 版本中存在一个错误,该错误会影响针对继承属性的 LINQ 查询:

https://jira.mongodb.org/browse/CSHARP-418

这已在 master 分支中修复,修复将在我们计划很快发布的 1.4.1 版本中。

于 2012-04-11T15:03:44.297 回答
0

没有什么明显是错的。您需要检查几件事:

  1. 真的是在向你展示的那条线投掷吗?
  2. repo不是null
  3. 不是,例如,如果您用固定值替换它customer是否有效?nullcustomer.Id1
  4. 确保repo.Get(...)永远不会返回null
于 2012-04-11T14:20:55.487 回答
0

没什么帮助,但是,Where 表达式通常返回一些东西或抛出一个 NotFound。在这种情况下,这意味着 repo 或 customer 为空。

如果您认为更新提供程序导致了这种情况,请尝试检查 Where 返回值。

于 2012-04-11T14:22:27.840 回答