When you first install Umbraco, Models Builder is configured by default to run in PureLive models mode and generates the model classes in the ~/App_Data/Models folder in the Umbraco.Web.PublishedContentModels namespace.
If you’re like me and want more control over namespacing and location of your classes, it’s possible. I’ve worked out 2 different ways of to make Models Builder generate the models in a separate project in a custom namespace.
Changing the namespace is the same for both – set the namespace in an web.config app setting with key Umbraco.ModelsBuilder.ModelsNamespace.
<add key="Umbraco.ModelsBuilder.ModelsNamespace" value="MyUmbracoApp.Core.Models" />
The first method uses the Models Builder API and will require you to manually update the models using a custom tool in Visual Studio whenever you update your document types. So you will need to install the Umbraco.ModelsBuilder.API NuGet package and the Umbraco Models Builder Custom Tool
Dave Woestenborghs has a good description of how to set this up in his article about Models Builder.
The second method uses LiveAppData models mode. I had to work this method out for myself because there weren’t any articles specifically about setting up LiveAppData to generate models in a separate project. I pieced it together by reading the Install and Configure documentation for Models Builder.
The trick is to set the ModelsDirectory and the AcceptUnsafeModelsDirectory app settings. The directory will need to be set relative to the path of the project that has UmbracoCms installed. The AcceptUnsafeModelsDirectory setting needs to be set to true to allow the models directory to be set to a folder outside of the Umbraco website project.
<add key="Umbraco.ModelsBuilder.ModelsMode" value="LiveAppData" /> <add key="Umbraco.ModelsBuilder.ModelsDirectory" value="~/../MyUmbracoApp.Core/Models" /> <add key="Umbraco.ModelsBuilder.ModelsNamespace" value="MyUmbracoApp.Core.Models" /> <add key="Umbraco.ModelsBuilder.AcceptUnsafeModelsDirectory" value="true" />
Both methods have their merits, but I think if you’re document types are changing frequently you’ll want to use the LiveAppData method.