Я проверил по крайней мере 20 разных мест о том, как удалить реестр «много-ко-многим» с помощью Entity Framework, и мой код, похоже, работает по почти всем решения, которые я нашел. К сожалению, я не могу удалить отношения, несмотря ни на что. Вот код:EF Удаление многих из многих не работает должным образом
using (var db = new Context())
{
var project = db.Projects.Single(p => p.Id == "myId");
foreach (var toRemove in project.Orders.Where(o =>
ordersToRemove.Select(otr => otr.Id).Contains(o.Id)).ToList())
{
project.Orders.Remove(toRemove);
}
db.SaveChanges();
}
Я также попытался заставить удаление внутри «Еогеасп», получая заказ от «DB» и удаление отношения проекта из него, просто чтобы проверить, но это было бесполезно.
В качестве информации я отлаживал ее, и в моей коллекции заказов в проекте у Орденов были удалены правильно прямо перед «SaveChanges».
В том же коде у меня очень похожий поток, чтобы добавлять заказы в Project, и он отлично работает.
Я сделал отображение в контексте вручную, например:
modelBuilder.Entity<Project>()
.HasMany(p => p.Orders)
.WithMany(o => o.Projects)
.Map(pc =>
{
pc.MapLeftKey("ProjectId");
pc.MapRightKey("OrderId");
pc.ToTable("Projects_Orders");
});
Я считаю, что это что-то глупо, что я не могу понять, так что из-за этого я прошу вашей помощи. Извините, если это дублированный вопрос, но, как я уже говорил, я нашел много ответов, что код такой же, как у меня.
ОБНОВЛЕНО: Я узнал кого-то, у кого была такая же проблема, как и я (here), и я попытался использовать отмеченное решение, но не работал. Я также попытался очистить всю коллекцию, затем сохранить, а затем снова добавить заказы, которые должны остаться, и не работал. Другое решение заключалось в создании объекта для связанной таблицы (что-то вроде ProjectOrder), но я думал, что это будет слишком чертовски уродливо.
В конце концов, я использовал «executesqlcommand» - , и я не горжусь этим. К сожалению, я просто не мог потратить на это больше времени.
Почему нет (!) В подзаголовке ordersToRemove? и что такое заказы? –
Mistyped, извините. Уже исправлено. ordersToRemove - это список объект. В качестве информации я отлаживал ее, и в моей коллекции заказов в проекте были исправлены ордеры прямо перед «SaveChanges». –
thiagoprzy
Вы получаете какое-либо конкретное исключение? – Vinod