Die Definition einer Datentabelle erfolgt am einfachsten über das XPO ORM Data Model Wizard von DevExpress. Rechter Mausklick auf dem Projekt “Add devExpress Item\New Item”

Orm Data Model Wizard

Der Wizard wird an keine Datenbank angebunden. Über die Toolbox kann nun ein “Persistent Object” hinzugefügt werden. In Business App werden alle Datentabellen mit dem Präfix “Orm” benannt.

Um die “Base Class” der Datentabelle setzen zu können, muss sie über “Add Assembly”, Auswahl der korrekten DLL aus dem “bin” Ordner und Auswahl des gewünschten Typs (Datentabelle) hinzugefügt werden. Eine Referenz auf die DLL muss nicht hinzugefügt werden.

Orm Data Model Base Class

Für die Definition einer neuen Datentabelle in Business App wird noch eine Erweiterung der EnumDataSource benötigt. Beispiel:

[EnumExtension(typeof(EnumDataSource))]
public static class EnumDataSourceExtension
{
    public const string MyDataTableGuid = "[INSERT DATA TABLE GUID]";
    public static readonly EnumDataSource MyDataTable = new EnumDataSource(MyDataTableGuid, 1000, "[INSERT TRANSLATION GUID]", "data_table");
}

Eine Schnittstelle wird ebenfalls benötigt, welche per Attribute an den Auswahllistenwert gebunden wird. Beispiel:

[OrmDataSource(EnumDataSourceExtension.MyDataTableGuid)]
public interface IOrmMyDataTable { }

Die neue Datentabelle (Persistent Object) muss das Interface implementieren

 public partial class OrmMyDataTable : IOrmMyDataTable

Mit dem Attribut DesignTimeVisible mit dem Parameter true steht die Datentabelle im Designer auch zur Auswahl und mit Description kann man der Datetabelle eine Beschreibung geben.

[DesignTimeVisible(true)]
[Description("Meine eigene Datentabelle")]
public partial class OrmMyDataTable : IOrmMyDataTable

Als Letztes wird die neue Datentabelle per Dependency Injection bekannt gemacht.

Bind<IOrmMyDataTable>().To<OrmMyDataTable>();

Wird eine Datentabelle erweitert, ist sowohl der Auswahlwert als auch die Schnittstelle schon vorhanden. In diesem Fall muss lediglich ein Rebind durchgeführt werden.

Rebind<IOrmPhoneCall>().To<OrmPhoneCall>();