---
title: Object configuration
slug: commerce-connect-14/docs/object-configuration
docTags: 
createdAt: 2026-07-23T10:25:33.704Z
---

These provide a lightweight object relational mapping (ORM) where you can add custom fields based on your business requirements. The [Customer subsystem](https://world.optimizely.com/documentation/developer-guides/commerce/customers/) uses business foundation objects for their storage mechanism.

Classes in this topic are in the following namespaces:

- Mediachase.BusinessFoundation.Data
- Mediachase.BusinessFoundation.Data.Meta.Management
- Mediachase.BusinessFoundation.Data.Modules

:::hint{type="info"}
**Note**
You should not modify the default business objects unless you have a full understanding of how it works.
:::

## Work with meta-class objects

### Create objects

```csharp
DataContext.Current = new DataContext(ServiceLocator.Current.GetInstance<IConnectionStringHandler>().Commerce.ConnectionString);
    ModuleManager.InitializeActiveModules();
    using (var scope = DataContext.Current.MetaModel.BeginEdit(MetaClassManagerEditScope.SystemOwner, AccessLevel.System))
    {
        var manager = DataContext.Current.MetaModel;
        var changeTrackingManifest = ChangeTrackingManager.CreateModuleManifest();
        var recentReferenceManifest = RecentReferenceManager.CreateModuleManifest();
        var budgetClass = manager.CreateMetaClass("Budget", "Budget", "Budgets", "cls_Budget", PrimaryKeyIdValueType.Integer);
        ModuleManager.Activate(budgetClass, changeTrackingManifest);
        using (var builder = new MetaFieldBuilder(budgetClass))
        {
            builder.CreateDateTime("StartDate", "StartDate", true, false);
            builder.CreateDateTime("EndDate", "EndDate", true, false);
            builder.CreateCurrency("Amount", "Amount", true, 0, true);
            builder.CreateText("Currency", "Currency", true, 50, false);
            builder.CreateText("Status", "Status", true, 50, false);
            builder.CreateCurrency("SpentBudget", "SpentBudget", true, 0, true);
            builder.CreateText("PurchaserName", "PurchaserName", true, 50, false);
            builder.CreateCurrency("LockOrganizationAmount", "LockOrganizationAmount", true, 0, true);
            var contactReference = builder.CreateReference("Contact", "CreditCard_mf_Contact", true, "Contact", false);
            var orgReference = builder.CreateReference("Organization", "CreditCard_mf_Organization", true, "Organization", false);
            builder.SaveChanges();
        }
    
        budgetClass.AddPermissions();
        scope.SaveChanges();
    }
```

### Edit objects

```csharp
DataContext.Current = new DataContext(ServiceLocator.Current.GetInstance<IConnectionStringHandler>().Commerce.ConnectionString);
    ModuleManager.InitializeActiveModules();
    using (var scope = DataContext.Current.MetaModel.BeginEdit(MetaClassManagerEditScope.SystemOwner, AccessLevel.System))
    {
        var manager = DataContext.Current.MetaModel;
        var contactMetaClass = manager.MetaClasses[ContactEntity.ClassName];
        var changeTrackingManifest = ChangeTrackingManager.CreateModuleManifest();
        var recentReferenceManifest = RecentReferenceManager.CreateModuleManifest();
        using (var builder = new MetaFieldBuilder(contactMetaClass))
        {
            builder.CreateText("UserRole", "{Customer:UserRole}", true, 50, false);
            builder.CreateText("UserLocation", "{Customer:UserLocation}", true, 50, false);
            builder.CreateInteger("Points", "{Customer:Points}", true, 0);
            builder.CreateInteger("NumberOfOrders", "{Customer:NumberOfOrders}", true, 0);
            builder.CreateInteger("NumberOfReviews", "{Customer:NumberOfReviews}", true, 0);
            builder.CreateText("Tier", "{Customer:Tier}", true, 100, false);
            builder.CreateText("ElevatedRole", "{Customer:ElevatedRole}", true, 100, false);
            builder.CreateHtml("Bookmarks", "{Customer:Bookmarks}", true);
            builder.SaveChanges();
        }
        contactMetaClass.DeleteMetaField("MiddleName");
        scope.SaveChanges();
    }
```

### Delete objects

```csharp
DataContext.Current = new DataContext(ServiceLocator.Current.GetInstance<IConnectionStringHandler>().Commerce.ConnectionString);
    ModuleManager.InitializeActiveModules();
    using (var scope = DataContext.Current.MetaModel.BeginEdit(MetaClassManagerEditScope.SystemOwner, AccessLevel.System))
    {
        var manager = DataContext.Current.MetaModel;
        manager.DeleteMetaClass("CreditCard");
        scope.SaveChanges();
    }
```
