Я занимаюсь разработкой блогового приложения в ASP.NET MVC и сомневаюсь, что мое решение об обновлении некоторых связанных классов является полностью правильным.
У меня есть класс, представляющий тексты:
public partial class Text
{
public long ID { get; set; }
public string Title { get; set; }
...
public virtual ICollection<Tag> Tags { get; set; }
}
и теги:
public partial class Tag
{
public long ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Text> Texts { get; set; }
}
Когда я редактирую тексты, TextEditorViewModel передается:
public class TextEditorViewModel
{
public long ID { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public IEnumerable<TagEditorViewModel> Tags { get; set; }
}
TagEditorViewModel - это:
public class TagEditorViewModel
{
public long ID { get; set; }
public string Name { get; set; }
public bool IsInText { get; set; }
}
В представлении я проверяю подходящие теги (это отражается в свойстве IsInText), и это прекрасно работает, и правильные данные передаются обратно в контроллер.
Вот мой код для репозитория, на котором работает контроллер:
Text OriginalText = Mapper.Map<Text>(Text);
IEnumerable<long> tags = OriginalText.Tags.Select(tag => tag.ID);
ICollection<Tag> tagobj = context.Tags.Where(tag => tags.Contains(tag.ID)).ToList();
OriginalText.Tags = tagobj;
Текст - это объект TextEditorViewModel, который передается обратно на пост. Я использую mapper для связывания только примитивных типов и переписываю все типы коллекций и ссылок (как показано выше), только теги, отмеченные как не в тексте, отфильтровываются. Есть ли более простой способ управления тегами вместо запроса базы данных и их переписывания?