---
title: MetaType class
slug: commerce-connect-15/docs/metatype-class
docTags: 
createdAt: 2026-07-30T20:34:42.000Z
---

`MetaType` includes common types, and you can extend it with UI-friendly types. For example, instead of using one type of string, Business Meta-Model has Short String, Long String, HTML, Email, Phone and number. You can create a new MetaType based on system type or create a custom one.

Business Foundation (BF) lets you use a number of different meta types for your .NET applications. You can use the included meta-types or implement a custom meta-type.

## Default meta-types

Call the `RegisteredTypes` property of the `MetaClassManager` class to get all registered meta-types. The following table shows ready-to-use BF meta-types in *Name (system type) – description*.

- `Guid` (Guid) – A globally unique identifier (GUID).
- `DateTime` (DateTime) – An instant in time, typically expressed as a date and time of day.
- `Date` (DateTime) – An instant in date.
- `Integer` (Integer) – A 32-bit signed integer.
- `Float` (Double) – A double-precision floating-point number.
- `Currency` (Currency) – A currency number.
- `CheckboxBoolean` (Boolean) – A Boolean value with check box.
- `DropDownBoolean` (Boolean) – A Boolean value with drop-down.
- `Text` (String) – Text of fixed length. Maximum length is 4096 chars.
- `EMail` (String) – An e-mail string.
- `Url` (String) – A URL string.
- `LongText` (String) – A long text.
- `Html` (String) – An HTML string.
- `File` (File) – A file (name, length, content type, stream).
- `Image` (File) – An image file.
- `IntegerPercent` (Integer) – A 32-bit signed integer percent.
- `FloatPercent` (Double) – A double-precision floating-point percent.
- `Duration` (Integer) – A 32-bit signed integer duration value.

## Create a meta type based on system type

You can create a new meta-type based on system type. You can find a complete list of system types in the `McDataType` enumerators.

To create a meta-type, such as `Geolocation` based on the String system type, open the edit scope and add a new `MetaFieldType` object to the `MetaClassManager.RegisteredTypes` collection.

The following example creates a `Geolocation` meta-type based on the `String` system type:

```csharp
// Open Meta model edit scope
using (MetaClassManagerEditScope scope = DataContext.Current.MetaModel.BeginEdit())
  {
    // Add a new meta type
    MetaFieldType geoLocation = new MetaFieldType("Geolocation", "Geolocation", McDataType.String);
    DataContext.Current.MetaModel.RegisteredTypes.Add(geoLocation);
    // Save Changes
    scope.SaveChanges();
  }
```

Or, add a new record to the `mcmd_MetaFieldType` table and restart the application.

```sql
INSERT INTO mcmd_MetaFieldType ([Name], [FriendlyName], [McDataType]) 
   VALUES ('Geolocation', 'Geolocation', 6)
```

After registration, you can add a geolocation field to the meta-class. Using the meta-type name, you can load a new geolocation view and edit the UI control.

## Create a custom meta type

When implementing a custom meta-type, you need to create the Meta-field installer and Meta-field property binder. When you create a meta-field, BF calls the meta-field installer to process meta-field into SQL columns. When you load an entity object, BF calls the meta-object property binder to convert values from an SQL column to a meta-field value.

To create a custom **Meta-field installer**, you create a class that implements the `IMetaFieldInstaller` interface, and implement the following methods.

### IMetaFieldInstaller interface methods

- `AssignDataSource` – Create a new columns in the SQL database from meta-field
- `AssignValidators` – Assign default validators
- `UpdateDataSource` – Update SQL columns from updated meta-field
- `UpdateValidators` – Update validators
- `RemoveDataSource` – Remove columns from SQL database
- `RemoveValidators` – Remove validators

To create a custom **Meta-object property binder**, create a class that implements the IMetaObjectPropertyBinder interface, and implement the following methods.

### IMetaObjectPropertyBinder interface methods

- `PreLoad` – Load value from SQL row and save to meta field property.
- `PostLoad` – Fill properties by other.
- `PreSave` – Save value to SQL row.
- `PostSave` – Fill properties by other.
- `Delete` – Clean up if meta field is removing.
- `InitTableConfig` – Initialize additional SQL relations. You should register the custom meta-field installer and meta-object property binder in the `appsettings.json` `Commerce` section.

```csharp
"Commerce": {
  "MetaObjectTypeOptions": {
    "Types": [{
      "Name": "CustomType",
      "Installer": "",
      "Binder": ""
    }]
  }
}
```
