Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

General

All builders that derive from MetadataBuilderBase will have the Builder property available to them. That property can be used to add, remove or retrieve metadata from the current model. The type behind the property is ModelBuilder - so the builder is already scoped to the current model.

Add

Class

To add an additional class simply use:

Builder.Add.Class(nameof(Elements.Office));

This will return an instace of ClassBuilder that can be used to furhter configure the created class.

A class with some additional configurations:

Builder.Add.Class(nameof(Elements.Office))
        .Caption(SwissGerman, "Büro")
        .PluralCaption(SwissGerman, "Büros")
        .NoCodeGeneration()
        .Sort("Name", SortDirection.Descending);

There's a fallback available in case the developer needs access to the underlying IMetaClass:

Builder.Add.Class(nameof(Elements.Office))
        .Configure(cls =>
        {
          // Do something with the IMetaClass
        });

Property

To add an additional property simply use:

Builder.Add.Property(Elements.Office, "Name", MetaType.Text);

This will return an instace of PropertyBuilder that can be used to furhter configure the created property.

A property with some additional configurations:

Builder.Add.Property(Elements.Office, "ShowPeople", MetaType.Boolean)
  .Caption(SwissGerman, "Personen anzeigen")
  .Required()
  .Transient()
  .DefaultExpression("true");

There's a fallback available in case the developer needs access to the underlying IMetaProperty:

Builder.Add.Property(Elements.Office, "ShowPeople", MetaType.Boolean)
        .Configure(prop =>
        {
          // Do something with the IMetaProperty
        });

Relation

To add a relation simply use:

Builder.Add.Relation(Elements.Company, AssociationType.ZeroOrOneToMany, Elements.Office, MetaPathRule.Cascade)

This will return an instance of RelationBuilder that can be used to further configure the created relation.

In der folgenden Tabelle werden die unterschiedlichen AssociationType-Werte und die damit verbundene Platzierung des ForeignKeys und dessen Nullability beschrieben.

Quell-Tabelle

Quell-FK

Quell-Kardinalität

AssociationType

Ziel-Kardinalität

Ziel-Tabelle

Ziel-FK

A

 

1

OneToZeroOrOne

0-1

B

Aid*

A

Bid*

1

OneToOne

1

B

 

A

Bid*

0-1

ZeroOrOneToOne

1

B

 

A

 

0-1

ZeroOrOneToMany

n

B

Aid

A

 

1

OneToMany

n

B

Aid*

A

Bid

n

ManyToZeroOrOne

0-1

B

 

A

Bid*

n

ManyToOne

1

B

 

Bei der OneToOne Verbindung ist auch die Platzierung des FK auf der anderen Seite denkbar. Wir haben uns aber dazu entschieden bei einer OneToOne-Verbindung von A nach B den FK in A zu platzieren damit auf A per SearchEdit ein B ausgewählt werden kann.

A relation with some additional configurations:

Builder.Add.Relation(Elements.Company, AssociationType.ZeroOrOneToMany, Elements.Office, MetaPathRule.Cascade)
  .Caption(SwissGerman, "Büros")
  .InverseCaption(SwissGerman, "Firma")
  .Control(nameof(ControlType.GridEditor))
  .InverseControl(nameof(ControlType.SearchEdit))
  .InverseLayout(LayoutType.Detail, "CompactLayout")
  .Rename("Offices");

There's a fallback available in case the developer needs access to the underlying generated elements:

Builder.Add.Relation(Elements.Company, AssociationType.ZeroOrOneToMany, Elements.Office, MetaPathRule.Cascade)
  .Configure(tuple =>
  {
    // tuple.relation;
    // tuple.inverseRelation;
    // tuple.foreignKey;
    // tuple.path;
    // tuple.index;
  });

Remove

The Builder exposes a property Remove that can be used to either remove a class or property from the model.

Builder.Remove.Class("Office");
Builder.Remove.Property("Office", "Name");

Get

The Builder exposes a property Get that can be used to either retrieve a class or property from the model.

Builder.Get.Class("Office");
Builder.Get.Property("Office", "Name");

  • No labels