---
title: Persist IContent instances
slug: cms-13/docs/persist-icontent-instances
docTags: 
createdAt: 2026-07-30T20:22:10.000Z
---

Save and load `IContent` instances through `IContentRepository`. The most typical content instance is a type inheriting `PageData`. Load and save content types other than pages, but those content instances do not appear in the editorial interface page tree.

:::hint{type="info"}
**Note**
`PageReference` is obsolete in CMS 13. Use `ContentReference` instead.
:::

Each `IContent` stored in the Optimizely Content Management System (CMS) content database must have a corresponding `ContentType` registered. Classes annotated with the `ContentType` attribute are automatically scanned for and registered during initialization.

The following example uses the `Comment` class to define and persist a `Comment` type. To implement comment functionality, each comment is saved as an `IContent` under the page that is commented. However, the comments do not display in the page tree.

## Define a comment content type

```csharp
[ContentType]
public class CommentUser : BlockData
{
    public virtual string Email { get; set; }

    public virtual string Username { get; set; }
}

[ContentType]
public class Comment : IContent
{
    public virtual CommentUser User { get; set; }

    public virtual string Body { get; set; }

    #region IContent

    private PropertyDataCollection _properties = new();

    public string Name { get; set; }

    public ContentReference ContentLink { get; set; }

    public ContentReference ParentLink { get; set; }

    public Guid ContentGuid { get; set; }

    public int ContentTypeID { get; set; }

    public bool IsDeleted { get; set; }

    public PropertyDataCollection Property => _properties;

    #endregion
}
```

## Save and load a comment

The following example creates a `Comment` instance, saves it, and reloads it. Use `IContentRepository` to create, load, and save content instances.

```csharp
public class CommentHandler(IContentRepository contentRepository)
{
    public Comment CreateAComment()
    {
        var comment = contentRepository.GetDefault<Comment>(ContentReference.RootPage);
        comment.User.Email = "user@test.com";
        comment.User.Username = "user@test.com";
        comment.Name = "acomment";       
        comment.Body = "This is a comment";

        var contentLink = contentRepository.Save(comment, EPiServer.DataAccess.SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess);
        var loadedComment = contentRepository.Get<Comment>(contentLink);

        Debug.Assert(comment.User.Email == loadedComment.User.Email);
        Debug.Assert(comment.Body == loadedComment.Body);

        return comment;
    }
}
```
