> For the complete documentation index, see [llms.txt](https://coldbox-orm.ortusbooks.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coldbox-orm.ortusbooks.com/v5.x/active-record/usage.md).

# Usage

How to use Active Record Entities in CBORM

Now that you have created your entities, how do we use them? Well, you will be using them from your handlers or other services by leveraging WireBox's `getInstance()` method or the service `new()` method. You can use `entityNew()` as well: in cborm 6 the event handler autowires entities created by `entityNew()`, `entityLoadOrNew()` and `entityLoadOrSave()`, and announces `ORMPostNew`, just like entities loaded from the database are autowired when they are loaded (this needs `eventHandling : true` and the cborm `eventHandler`). As best practice, still retrieve everything from WireBox.

Once you have an instance of the entity, then you can use it to satisfy your requirements with the entire gamut of functions available from the [base services](/v5.x/base-orm-service/service-methods.md).

{% hint style="success" %}
**Tip:** You can also check out our [Basic CRUD](/v5.x/getting-started/basic-crud.md) guide for an initial overview of the usage.
{% endhint %}

```javascript
class {

    function index( event, rc, prc ){
        var user = getInstance( "User" );
        prc.data = user.list( sortOrder="fname" );
        // A Java stream, read from the database as it is consumed
        prc.stream = user.list( sortOrder="fname", asStream=true );
    }

    function count( event, rc, prc ){
        return getInstance( "User" ).countWhere( isActive = true );
    }

    function show( event, rc, prc ){
        return getInstance( "User" )
            .getOrFail( 123 )
            .when( rc.isActive, (user) => user.checkIfActive() )
            .getMemento();
    }

    function save( event, rc, prc ){
        return populateModel( model="User", composeRelationships=true )
            .save()
            .getMemento();
    }

    function delete( event, rc, prc ){
        getInstance( "User" )
            .getOrFail( rc.id ?: -1 )
            .delete();
        return "User Deleted";
    }

}
```

## Methods That Default to the Entity

Methods that take an entity default to the active entity itself, so you can call them without arguments: `save()`, `delete()`, `refresh()`, `merge()`, `evict()`, `isDirty()`, `getDirtyPropertyNames()`, `getKeyValue()` and `sessionContains()`.

```javascript
var user = getInstance( "User" ).getOrFail( rc.id );
user.setEmail( rc.email );

if( user.isDirty() ){
    log.info( "Changed: #user.getDirtyPropertyNames().toList()#" );
}
var id = user.getKeyValue();
```

## Locking and Structs

* `lock( mode = "write", options = {} )` locks the entity's row until the current transaction ends (it must run inside a `transaction{}`). `options` takes `timeout` and `skipLocked`.
* `toStruct( options = {} )` returns the entity as a struct via `bx-orm`'s `entityToStruct()`, which honors the entity's `this.memento` includes and excludes. Mementifier's `getMemento()` is still available when mementifier is installed, and it is the default the resource handler uses.

```javascript
transaction {
    var account = getInstance( "Account" ).getOrFail( rc.id ).lock();
    account.setBalance( account.getBalance() - rc.amount ).save();
}

return getInstance( "User" ).getOrFail( rc.id ).toStruct( { includes : "role.name" } );
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://coldbox-orm.ortusbooks.com/v5.x/active-record/usage.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
