У меня возникли некоторые проблемы с моей моделью EF Code First при сохранении отношения со многими ко многим. Мои модели:
public class Event
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
public class Tag
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Event> Events { get; set; }
}
В моем контроллере я сопоставляю одну или несколько моделей TagViewModel с типом тега и отправляю их на уровень обслуживания для сохранения. В это время при проверке сущностей у тега есть и идентификатор, и имя (идентификатор - это скрытое поле, а имя - это текстовое поле, на мой взгляд)
Проблема возникает, когда я сейчас пытаюсь добавить тег к событию. Давайте рассмотрим следующий сценарий:
Событие уже есть в моей базе данных, и, скажем, оно уже имеет связанные теги C#, ASP.NET
Если я сейчас отправлю следующий список тегов на уровень обслуживания:
ID Name
1 C#
2 ASP.NET
3 EF4
и добавьте их, сначала извлекая Событие из БД, чтобы у меня было фактическое Событие из моего DbContext, затем я просто делаю
myEvent.Tags.Add
для добавления тегов. Проблема в том, что после SaveChanges()
моя БД теперь содержит этот набор тегов:
ID Name
1 C#
2 ASP.NET
3 EF4
4 C#
5 ASP.NET
Это, несмотря на то, что мои сохраненные теги имеют свой идентификатор, установленный при сохранении (хотя я не получил их из БД)