Umbraco Models Builder Introduction

    Models Builder is a tool that can generate a complete set of strongly-typed published content models for Umbraco 7.1.4+. Starting with Umbraco 7.4.0, Models Builder is bundled with the main Umbraco distribution. Models can be used anywhere content is retrieved from the content cache, i.e. in MVC views, controllers, etc. In other words, the content cache does not return IPublishedContent objects anymore, but strongly typed models.

    For each content (media, and member) type in the Umbraco setup, the generator creates a *.generated.cs file, corresponding to the content type, which looks like this:

    namespace MyModels
    {
        public partial class NewsItem : PublishedContentModel
        {
            public string Title { get { return this.GetPropertyValue<string>("title"); } }
            public IHtmlString BodyText { get { return this.GetPropertyValue<IHtmlString>("bodyText"); } }
        }
    }
    

    Umbraco's content cache returns these objects natively: No need to map, convert or anything; the following code runs:

    @inherits UmbracoViewPage<NewsItem>
    @using MyModels
    <h1>@Model.Title</h1>
    @Model.BodyText
    

    Note: If your view inherits from UmbracoViewPage<NewsItem> then the model is the content item itself and the syntax is @Model.Title. If, on the other hand, your view inherits from UmbracoTemplatePage<NewsItem> then the model is a RenderModel instance and the syntax is @Model.Content.Title.

    Models Builder respects the content types' inheritance tree, i.e. models inherit from each other if required, and mixins (content type compositions) are represented by interfaces.

    Models Builder is a "code-after" solution. It only generates code from content types that already exist in Umbraco. It is not a "code-first" solution--code-first is a much more complex question.

    And once you are using strongly typed models, there are some cool things that you can do!

    Installing

    Starting with version 7.4.0, the Umbraco.ModelsBuilder NuGet package is bundled with the main Umbraco distribution. See https://github.com/zpqrtbnk/Zbu.ModelsBuilder/releases for more details.

    Documentation

    At the core of the strongly typed models "experience" is the IPublishedContentModelFactory interface, which has been made public with Umbraco version 7.1.4. This interface is part of Core. It is responsible for mapping the internal IPublishedContent implementations that would be returned by the content cache, to strongly typed models. Although there is a default factory shipped with Umbraco, it is possible to replace it by custom implementations. And even using the default factory, models do not necessarily need to be generated by Models Builder. See the IPublishedContentModelFactory page.

    Models Builder is one way to generate models for the default, built-in factory. Models can be generated either straight from the Umbraco backoffice, or via a console application, or via a Visual Studio extension.