Manage item relations

Sitefinity provides you with an API to work with Related data. RelatedDataExtensions method is implemented to facilitate your work with Related data. The method is located in the Telerik.Sitefinity.RelatedData namespace. The following code sample demonstrates how you can create, edit, and delete item relations. In the example, you have a news item with Related data field “speakers” to dynamic content type Telerik.Sitefinity.DynamicTypes.Model.DevReach.Speaker:

C#
using System;
using System.Linq;
using Telerik.Sitefinity.DynamicModules;
using Telerik.Sitefinity.DynamicModules.Model;
using Telerik.Sitefinity.Modules.News;
using Telerik.Sitefinity.News.Model;
using Telerik.Sitefinity.RelatedData;
using Telerik.Sitefinity.Utilities.TypeConverters;

namespace SitefinityWebApp
{
    public class RelatedDataAPI_ManageItemRelations
    {
        public void ManageItemRelations()
        {
            // get a master news item
            NewsManager newsManager = NewsManager.GetManager();
            var newsItem = newsManager.GetItems<NewsItem>().Where(n => n.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Master).First();

            // get a master dynamic content item of type Speaker
            DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager();
            Type speakerType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.DevReach.Speaker");
            var speaker = dynamicModuleManager.GetDataItems(speakerType).Where(s => s.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Master).First();

            // create a relation to speaker. Relation will be available only for the current item state (Master)
            newsItem.CreateRelation(speaker, "speakers");
            newsManager.SaveChanges();

            // on publish, all item's relations are copied from Master to Live state.
            newsManager.Lifecycle.Publish(newsItem);
            newsManager.SaveChanges();

            // get the count of all related speakers of this news item
            var relatedSpeakersCount = newsItem.GetRelatedItemsCountByField("speakers");

            // get all related speakers of this news item
            var relatedSpeakers = newsItem.GetRelatedItems<DynamicContent>("speakers");

            // get all related parent items to the speaker (i.e. all news items relating this speaker)
            var relatedParents = speaker.GetRelatedParentItems<NewsItem>();

            // delete the relation between the news item and the speaker
            var relatedSpeaker = relatedSpeakers.First();
            newsItem.DeleteRelation(relatedSpeaker, "speakers");
            newsManager.SaveChanges();
        }
    }
}
Want to learn more?
Enhance your Sitefinity skills by enrolling in free training sessions. Become Sitefinity certified through Progress Education Community to strengthen your professional credentials.
New to Sitefinity?