首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QBO3保存相关记录

QBO3保存相关记录
EN

Stack Overflow用户
提问于 2018-06-22 14:13:05
回答 1查看 10关注 0票数 0

我有一个自定义QBO3页面,用于呈现来自多个表的数据--自定义表:

  • Foo:父表
  • Bar:相关表1
    • Foo.BarIDBar表的外键约束。

  • Crunch:儿童表2

我的Foo/Summary页面呈现所有Foo列,以及:

  • 酒吧记录:Bar.FieldABar.FieldB
  • 第一次压缩记录:Crunch.FieldCCrunch.FieldD
  • 第二次压缩记录:Crunch.FieldCCrunch.FieldD

我可以通过BarCrunch表将这些HTML输入值映射到Foo/Save,还是需要调用Foo/SaveBar/SaveCrunch/Save (两次)?

EN

回答 1

Stack Overflow用户

发布于 2018-06-22 14:13:05

是;将下列参数张贴到Foo/Save:

代码语言:javascript
复制
Foo.ashx/Save?ID=X
  &Bar_FieldA=BA
  &Bar_FieldB=BB
  &Crunches_0_FieldC=CC1
  &Crunches_0_FieldD=CD1
  &Crunches_1_FieldC=CC2
  &Crunches_1_FieldD=CD2

QBO的AbstractObject/Save方法支持将数据持久化到QBO3知道的任何相关表。这包括:

  • 外键(用于带有C#属性标记的ForeignKey属性)
  • 子属性(用于标记为C#属性的Child属性)
  • 子类(在类的ObjectConfiguration中配置)

当调用Foo/Save时,AbstractObject/SetProperties将:

检查外键参数

AbstractObject将遍历每个已定义的外键(包括Foo.BarID),如果存在以{ForeignKey}开头的参数(减去一个ID),则设置外键对象的属性。如果Foo.BarID是按照Foo.Fields.cs中的以下路线定义的,那么这将有效:

代码语言:javascript
复制
[ForeignKey(typeof(my.Namespace.BarObject), "Bar")]
public Int64 BarID {...}

检查子类属性的集合

AbstractObject将遍历每个已配置的子类,如果存在以ChildClass.Name开头的参数,则创建子对象集合并在集合上设置属性。要使其有效,您必须:

Crunches作为Foo的子类包含在Foo.config

代码语言:javascript
复制
<ChildClasses>
  <Child Name="Crunches" Type="my.Namespace.CrunchObject, my.Namespace"/>
</ChildClasses>

由于子类意味着1:多关系,集合(由AbstractCollection<T>实现)期望每个Crunch记录共享一个基于0的公共前缀。

注意事项:配置驱动子类的替代方法是使用以下模式创建一个名为Crunches的C#属性:

代码语言:javascript
复制
[Child(typeof(CrunchObject)), XmlIgnore] 
public CrunchCollection Crunches {...}

其中CrunchCollectionAbstractCollection<CrunchObject>派生,添加已知类型:

代码语言:javascript
复制
[KnownType(typeof(CrunchCollection))]
[KnownType(typeof(CrunchObject))]
public class CrunchCollection : AbstractCollection<CrunchObject>
{...}

这允许AbstractObject通过在编译时知道数据类型的反射来实例化集合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50989884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档