Я пытаюсь обновить отношения многие ко многим, используя код EF.Всякий раз, когда я обновляюсь, я получаю эту ошибку, DietaryListings в ошибке - это таблица соединения, созданная миграциями:
Нарушение ограничения PRIMARY KEY 'PK_dbo.DietaryListings'.Невозможно вставить повторяющийся ключ в объект 'dbo.DietaryListings'.Дубликат значения ключа (1, 52).Оператор был прерван.
Я понимаю, что до обновления уже существовали дублирующиеся данные в DietaryListings.Я просто не понимаю, почему EF не разрешает обновление, используя сопоставленные отношения между Listing
и Dietary
.Разве EF не должен обновлять отношения, если они меняются?Нужно ли вручную удалять дубликаты записей в этой таблице соединений перед обновлением EF объекта?
В моем MVC Controller
я пытаюсь обновить существующий объект данными модели, переданными из бритвыпросмотреть с помощью этого:
//listing = updated model from razor view
//listingExisting = listing from db service
foreach (var dietary in listing.Dietaries)
{
if (dietary.Selected)
{
listingExisting.Dietaries.Add(dietary);
}
}
listingExisting.ObjectState = Repository.Pattern.Infrastructure.ObjectState.Modified;
_listingService.Update(listingExisting);
Класс листинга:
public partial class Listing : Repository.Pattern.Ef6.Entity
{
public Listing()
{
this.Dietaries = new List<Dietary>();
}
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Dietary> Dietaries { get; set; }
}
Класс диетологии:
public partial class Dietary: Repository.Pattern.Ef6.Entity
{
public Dietary()
{
this.Listings = new List<Listing>();
}
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Listing> Listings { get; set; }
}
Я просмотрел все эти ссылки и некоторые из них были полезныно не работает: link1 link2 link3 link4 link5 link6