mongodb c# 驱动程序 - 继承、映射和序列化问题

2024-07-01

我有以下存储在 mongodb 中的对象的类层次结构(我仅在其图中存储分支对象和实体)

public class Branch : Aggregate
{
    public IEnumerable<LocalizableText> Description { get; set; }
    public ObjectId PartnerId { get; set; }
    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public string Timetable { get; set; }
    public IEnumerable<Discount> Discounts { get; set; }
    public IEnumerable<Category> Categories { get; set; }
    public IEnumerable<Phone> Phones { get; set; }
    public byte[] Icon { get; set; }
    public byte[] Image { get; set; }
}

public abstract class Aggregate : Entity
{
    public ObjectId Id { get; set; }
}

public abstract class Entity
{
    public IEnumerable<LocalizableText> Name { get; set; }
}

我在服务器启动时为此层次结构运行以下注册:

        BsonClassMap.RegisterClassMap<Entity>();
        BsonClassMap.RegisterClassMap<Aggregate>(cm =>
        {
            cm.AutoMap();
            cm.SetIdMember(cm.GetMemberMap(a => a.Id));
        });
        BsonClassMap.RegisterClassMap<Branch>();

但是当我运行这个查询时

return await Collection.Aggregate().Match(x => x.PartnerId == partnerId)
                                            .Group(x => x.PartnerId, g => new
                                                                            {
                                                                                PartnerId = g.Key,
                                                                                g.First(x => x.Name != null).Name,
                                                                                Description = g.First(x => x.Id == branchId).Name,
                                                                                g.First(x => x.Id == branchId).Discounts,
                                                                                Id = branchId
                                                                            })
                                            .Project(g => new Branch()
                                                            {
                                                                Id = g.Id,
                                                                Name = g.Name,
                                                                Description =  g.Description,
                                                                Discounts = g.Discounts,
                                                                PartnerId = g.PartnerId
                                                            }).FirstOrDefaultAsync();

我收到以下异常:

测试方法 ShouldGetBranchToolTipAsync 抛出异常:

System.ArgumentOutOfRangeException:memberInfo 参数必须是 适用于 Branch 类,但适用于 Aggregate 类。

参数名称:成员信息 在 MongoDB.Bson.Serialization.BsonClassMap.EnsureMemberInfoIsForThisClass(MemberInfo memberInfo) 在 MongoDB.Bson.Serialization.BsonClassMap.MapMember(MemberInfo memberInfo) 在 MongoDB.Driver.Linq.Translators.AggregateProjectionTranslator.SerializerBuilder.BuildProjectedSerializer(ProjectionMapping 映射) 在 MongoDB.Driver.Linq.Translators.AggregateProjectionTranslator.SerializerBuilder.BuildMemberInit(MemberInitExpression 节点) 在 MongoDB.Driver.Linq.Translators.AggregateProjectionTranslator.SerializerBuilder.Build(表达式节点) 在 MongoDB.Driver.Linq.Translators.AggregateProjectionTranslator.SerializerBuilder.Build(表达式节点,IBsonSerializerRegistryserializerRegistry) 在 MongoDB.Driver.Linq.Translators.AggregateProjectionTranslator.TranslateProject(表达式1 projector, IBsonSerializer1参数Serializer,IBsonSerializerRegistry序列化器注册表) 在 MongoDB.Driver.IAggregateFluentExtensions.ProjectExpressionProjection2.Render(IBsonSerializer1 documentSerializer、IBsonSerializerRegistry 序列化器注册表)

这是什么原因呢?映射是否不正确或在错误的时间调用?


根据我联系过这个问题的 mongodb 开发人员

  1. 异常不提供信息
  2. 尚不支持第一个语句

请看这个ticket https://jira.mongodb.org/browse/CSHARP-1253了解更多信息。

我们将在 2.0.1 及更高版本中进行改进来解决此问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mongodb c# 驱动程序 - 继承、映射和序列化问题 的相关文章

  • 为什么 C# 三元运算符不能与委托一起使用?

    当分支选择函数时 使用三元运算符来选择函数可能是有意义的 但这是不可能的 为什么 public class Demo protected bool branch protected void demo1 protected void dem
  • C++14 中专门用于数组类型的分配器?

    为什么 c 14 中没有 std allocator 的数组模板专门化 当我自己尝试专门化 std allocator 时 我在实现 Construction 和 destroy 方法时遇到了死胡同 是这个原因吗 那么为什么 std all
  • 使用 X509 证书对多个收件人进行 XML 加密和解密

    我已经成功地使用 MSDN 上的示例来加密和解密 xml 文档 http msdn microsoft com en us library ms229744 aspx http msdn microsoft com en us librar
  • 单元测试依赖注入

    我在用Autofac for IoC 这是我的容器启动器类 其职责是注册依赖项 public class ContainerInit public static IContainer BuildContainer var conFac ne
  • 如何在单击按钮时关闭 .exe 应用程序

    谁能告诉我如何使用 C 在单击按钮时关闭 exe 文件 我知道如何使用 C 在单击按钮时运行 exe 文件 如下所示 string str C windows system32 notepad exe process StartInfo F
  • 在运行的 Windows 控制台应用程序中处理拖放文件

    首先澄清一下 我是not询问如何将文件拖放到 exe 图标上 我想知道如何处理拖放到已经运行win32 控制台应用程序 我也是not询问如何通过 Windows 消息泵处理基于 WinMain 的应用程序内部的拖放 我想在带有入口点的程序内
  • 在 C++ 中调用函数有多少开销?

    许多文献都谈到使用内联函数来 避免函数调用的开销 但我还没有看到可量化的数据 函数调用的实际开销是多少 即通过内联函数我们可以实现什么样的性能提升 在大多数架构上 成本包括将所有 或部分 或没有 寄存器保存到堆栈 将函数参数推送到堆栈 或将
  • 如何在预处理器中检测X32 ABI或环境?

    X32是一个 ABIamd64 x86 64使用 32 位指针的 CPU 这个想法是将 x86 64 的较大寄存器集与 32 位指针产生的较小内存和缓存占用空间结合起来 它可提供高达约 40 的加速 看x86 x32 和 x64 架构之间的
  • 将 HTML 渲染为图像

    我正在基于动态输入和裁剪图像生成优惠券 并且现在使用 ntml 和 css 显示优惠券 问题是 打印这已成为一个问题 因为打印时背景如何消失以及其他问题 所以我认为最好的解决方案是能够基于html生成图像 或者设置某种接受字符串和图像的模板
  • 反序列化 jQuery 序列化表单

    我正在尝试将表单输入传递到 WebMethod 中并执行某些操作 我用了jQuery 序列化 http api jquery com serialize
  • 如何更改母版页中控件的值?

    如何更改控件的值 例如用户控件中的文字 并且该用户控件位于母版页中 我想从内容页更改该文字的值 System Web UI UserControl this Page Master FindControl ABC FindControl X
  • 为什么不允许静态常量浮点数? [复制]

    这个问题在这里已经有答案了 我有一个类 它本质上只是保存了我的应用程序中使用的一堆常量定义 但由于某种原因 longs 编译但是float不 class MY CONSTS public static const long LONG CON
  • C:分段错误:GDB:<读取变量时出错>

    我有一个函数shortestPath 它是Dijkstra算法的修改实现 用于我正在为comp2类开发的棋盘游戏AI 我浏览了网站并使用 gdb 和 valgrind 我确切地知道段错误发生的位置 实际上几个小时前就知道了 但无法弄清楚是什
  • 如何向保存在 Azure 表存储中的实体添加新属性?

    我正在使用一个应用程序 其中从保存到 Azure 表存储的 TableServiceObject 派生的 NET 类型 称为 人员 具有另一个实体 事件 的集合 当然 集合属性不会保存到 Azure 表存储 我想要做的是在 Person 存
  • 从构造函数调用虚函数[重复]

    这个问题在这里已经有答案了 我正在阅读有效的C https en wikipedia org wiki Scott Meyers 还有 第 9 条 在构造或销毁期间切勿调用虚函数 我想知道我的代码是否正确 即使它违反了这条规则 using
  • “System.Int64”类型的表达式不能用于返回类型“System.Object”

    我正在尝试创建以下形式的表达式 e gt e CreationDate CreationDate属于类型long 但是我希望表达式返回一个object反而 我想用object作为返回类型 因为表达式是在运行时根据查询参数动态构建的 查询参数
  • “System.Int64”类型的表达式不能用于返回类型“System.Object”

    我正在尝试创建以下形式的表达式 e gt e CreationDate CreationDate属于类型long 但是我希望表达式返回一个object反而 我想用object作为返回类型 因为表达式是在运行时根据查询参数动态构建的 查询参数
  • 如何在 WPF 数据网格中显示相关表中的数据

    我只是在寻找使用 WPF Datagrid Linq 的方法 并且试图找出如何显示数据网格中相关表中的数据 例如我有3张表 客户 id 姓名 产品 id 名称 订单 id 客户 ID 产品 ID 我已经在数据库表中建立了关系 我已将表添加为
  • 一种关于类成员访问表达式的定义规则

    在 N4296 3 2 basic def odr p3 中 一个变量x其名称显示为可能评估的表达式ex被 ODR 使用的是ex除非将左值到右值转换应用于x产生一个不调用任何非平凡函数的常量表达式 并且 如果x是一个对象 ex是表达式的潜在
  • 在node.js和mongodb中处理异步数据库查询

    我在从 Node js 异步查询 mongodb 时遇到了这个问题 这是我的代码 var values var positives new Array var negatives new Array var server1 new mong

随机推荐

  • ViewPager SetCurrentItem点击后不设置位置

    我在用着触摸图像视图 https github com MikeOrtiz TouchImageView以全屏加载图像并具有缩放 捏合功能 这些图像是通过 Web 服务从 URL 中提取的 响应采用 JSON 格式 在这一部分 我使用 Vo
  • 在 ruby​​ 中一次读取文件 N 行

    我有一个大文件 数百兆 其中包含文件名 每行一个 我需要循环遍历文件名列表 并为每个文件名分叉一个进程 我一次最多需要 8 个分叉进程 并且不想一次将整个文件名列表读入 RAM 我什至不知道从哪里开始 有人可以帮助我吗 File forea
  • 为什么 GCC 在获取 void 表达式的地址时开始发出警告?

    在几个 GCC 版本之前 我可以做这样的巧妙的事情 objcopy I binary O elf64 x86 64 B i386 foo png foo png o 加上以下 C 语言 作为 SDL 图像加载的示例 extern void
  • HAL_SetDate 将年份设置为错误值

    我将 STM32F030RCT6 与 CubeMX 一起使用 设备是一个数据记录器 RTC 是不能失败的主要部分 在勘误表 http www st com resource en errata sheet dm00091791 pdf有一些
  • 如何在单元测试期间验证某个 javascript 函数已被调用

    我正在使用 JsTestDriver 和一些 Jack 仅在需要时 有谁知道如何验证单元测试期间是否已调用 JavaScript 函数 E g function MainFunction var someElement or some ot
  • 当不抛出是零成本时,noexcept就没用了吗?

    Is the noexcept如果您的实现具有零成本 如果没有抛出任何异常 异常模型 那么说明符毫无用处 缺少什么的例子noexcept有后果吗 Is the noexcept如果您的实现具有零成本 如果没有抛出任何异常 异常模型 那么说明
  • 创建具有恒定颜色的 numpy 图像

    创建所有通道具有恒定标量的彩色图像很容易 height width 3 4 shape height width num channels 3 scalar value 0 5 image np full shape num channel
  • 如何动态加载谷歌地图库

    I know 我可以使用 google 地图 api v3 加载库librariesURL 中的参数 https developers google com maps documentation javascript libraries 现
  • 如何构建 Meteor 智能包

    一个人怎样才能建立一个流星智能套餐 http docs meteor com packages会出现在meteor list 建筑气氛 http atmosphere meteor com套餐相当不错记录在案 https atmospher
  • 如何使用 webdriver.io 模拟 ctrl 单击或 shift 单击?

    With webdriver io I would like to simulate clicks with a modifier like shift or ctrl The keys method seems to do somethi
  • 如何在 AWS Cognito 用户池中编辑特定用户的用户属性?

    我正在使用 AWS Cognito 用户池并创建了一些用户 现在我想更改特定用户的一些属性 例如姓名 地址等 是否可以在 AWS 网站上执行此操作 如果是这样 怎么办 控制台不具备该功能 但可以在 AWS 命令 行界面中完成 aws cog
  • 从本地托管的 Web 应用程序强制执行许可证 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设我们有一个 Web 应用程序 它既是 可通过 Internet 访问的托管解决方案 能够在本地安装以用作 Intranet 应用程
  • 用 pandas 将字符串拆分为数字和文本

    设置 我有一个pandas包含 iso 列的数据框 其中包含化学同位素符号 例如 4He 16O 197Au 我想使用以下方法在绘图上标记许多 但不是全部 同位素annotate 函数于matplotlib 标签格式应在上标中包含原子质量
  • 在哪里可以找到所有 Windows 错误代码的列表?

    在上一个问题中 我问当我的程序返回一个模糊的值 例如 1073741819 嗯 现在我又得到了一个大的回报值 1073740777 我想知道是否有所有这些值的列表以及它们在某个地方的含义 这是一个100 免费的在线工具 MagnumDB h
  • 保护胖客户端应用程序中的 API 密钥

    在应用程序中 我使用密钥来计算 API 调用的哈希值 在 NET 应用程序中 使用 Reflector 之类的程序从程序集中提取信息以包含这些键是相当容易的 混淆程序集是保护这些密钥的好方法吗 可能不会 研究密码学和 Windows 的内置
  • `insertAdjacentHTML` 和 `createElement`

    如何保留对新创建元素的引用 createElement 我将其插入到 DOM 中的现有元素之后 insertAdjacentHTML 在此示例中 您可以看到如果我使用 颜色不会改变elNew elNewInner after insertA
  • 学习 Haskell:如何从 Haskell 列表中删除项目

    尝试学习 Haskell 我正在尝试编写一个简单的函数来从列表中删除一个数字 而不使用内置函数 删除 我认为 为了简单起见 我们假设输入参数是 Integer 列表是 Integer 列表 这是我的代码 请告诉我以下代码有什么问题 areT
  • R 中的 shapefile 到神经网络

    我需要转换道路类型的 shapefile ESRI SpatialLinesDataFrame在 R 的神经网络中 我不知道如何删除形状的节点或顶点 确定节点之间每条边的长度 通过这些参数 我可以使用数据包 网络 创建网络 摘要 R 中 i
  • 使用吞咽时。有什么方法可以抑制某些任务的“开始”和“完成”日志条目

    使用吞咽时 有什么方法可以抑制某些任务的 开始 和 完成 日志条目吗 我想使用依赖关系树 但树中有一些我不想记录的任务 因为它们是具有自己的日志记录设施的中间步骤 您可以使用 silent使用 gulp CLI 标记以禁用所有 gulp 日
  • mongodb c# 驱动程序 - 继承、映射和序列化问题

    我有以下存储在 mongodb 中的对象的类层次结构 我仅在其图中存储分支对象和实体 public class Branch Aggregate public IEnumerable