c# - 我可以选择检索 protobuf-net 或 NHibernate 中的对象字段吗?

标签 c# fluent-nhibernate client-server protobuf-net

我通过以下方式有一个客户端服务器应用程序。

enter image description here

在域中,某些类具有子类的集合。有些 child 会引用他们的 parent 。

问题在于,当向服务器发出针对子对象的请求时,所有其他子对象都会随响应一起返回。在许多情况下,从子对象访问父对象非常有帮助,我不希望向父对象发出单独的请求,因为这会导致更多的往返。

通常 Nhibernates 延迟加载会处理这个问题,但与 protobuf-net(或任何其他序列化)的交互意味着所有字段都被访问以进行序列化。客户端无法直接访问数据库。

是否可以限制 protobuf-net 或 Nhibernate 中的对象引用深度,以便我可以在对服务器的请求中包含一个标志,表示不要加载超过 2 个对象深度。

例如 订单 - 订单项目 - 交货信息。

订单请求限制为 1 意味着不加载送货信息。限制为 0 意味着不加载订单商品。

或者,是否可以选择停止加载引用(限制为 0 或无限制),这是更严格的限制,但可能更容易实现。

最佳答案

protobuf-net 支持 ShouldSerialize* 模式(与多个 BCL 实现相同,包括 IDE/PropertyGrid 和 XmlSerializer)。

如果你有:

[ProtoMember(1)]
public int Whatever { get; set; }

以及相应的:

public bool ShouldSerializeWhatever() {
    ...
}

只有当 ShouldSerializeWhatever 返回 true 时,Whatever 才会被序列化。这种模式完全基于名称。该方法可以是公共(public)的或非公共(public)的(但 XmlSerializer 仅接受公共(public)方法,因此如果您使用多个序列化程序,请将其保持为公共(public))。

关于c# - 我可以选择检索 protobuf-net 或 NHibernate 中的对象字段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10318802/

相关文章:

c# - 流利的 Nhibernate,子类,ManyToMany。表中的关联引用未映射的类

c# - 从函数中获取 NHibernate QueryOver .SelectList(x)

c# - 编程错误我似乎无法修复 : Unable to write data to the transport connection

python unittest 运行服务器和客户端并传递 raw_input

java - 在 Java 中测试基于客户端-服务器的应用程序

c# - 如何为继承多个接口(interface)的对象创建模拟接口(interface)

c# - 缩写列表中给定的字符串

c# - Visual Studio - 为具有相同名称的程序集构建不同版本

javascript - 自定义错误消息未从 javascript ajax 返回自定义消息

nhibernate - 即使使用 AllDeleteOrphan,FluentNHibernate 也不会删除子实体