Area: Optimizely CMS
Applies to versions: 10 and higher
Other versions:

Persisting IContent instances

Recommended reading 

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

Each IContent stored in the 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 can be saved as an IContent under the page that is commented. However, the comments do not appear in the page tree. 

Defining a comment content type

public class CommentUser : BlockData
  public virtual string Email { get; set; }
  public virtual string UserName { get; set; }

public class Comment : IContent
  public virtual CommentUser User { get; set; }
  public virtual string Body { get; set; }

  #region IContent
  private PropertyDataCollection _properties = new PropertyDataCollection();

  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
    get { return _properties; }
  public bool IsNull
    get { return _properties.Count == 0; }
Saving and loading comment

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

public class CommentHandler
  private IContentRepository _contentRepository;
  public CommentHandler(IContentRepository contentRepository)
    _contentRepository = contentRepository;

  public Comment CreateAComment()
    var comment = _contentRepository.GetDefault<Comment>(PageReference.RootPage, LanguageSelector.AutoDetect());
    comment.Name = "acomment";
    comment.User.Email = "user@test.com";
    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);

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

    return comment;

Do you find this information helpful? Please log in to provide feedback.

Last updated: Oct 26, 2016

Recommended reading