#ef-code-first
#ef-code-first
Вопрос:
У меня есть следующая модель домена:
public class Campaign
{
public virtual long Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Content> Content { get; set; }
}
public class Content
{
public virtual long Id { get; set; }
public virtual string Body { get; set; }
}
Это настроено:
modelBuilder.Entity<Campaign>().HasMany(x => x.Content).WithOptional();
В моем сервисе у меня есть следующий код:
Campaign campaign = campaignRepository.GetById(id);
Это загружает кампанию и все связанные элементы контента в коллекцию, что здорово. Проблема связана со следующим кодом:
campaign.Name = "new value";
campaign.Content.Clear();
unitOfWork.Commit();
При этом строки содержимого из базы данных не удаляются. Это фактически устанавливает внешний ключ в таблице содержимого в значение null для затронутых строк, но не удаляет строки.
Затем я попытался изменить конфигурацию на:
modelBuilder.Entity<Campaign>().HasMany(x => x.Content).WithRequired();
Это просто дало бы мне следующее исключение: связь из набора ассоциаций ‘Campaign_Content’ находится в состоянии ‘Deleted’. Учитывая ограничения на множественность, соответствующий ‘Campaign_Content_Target’ также должен находиться в состоянии ‘Deleted’.
Должен быть способ удаления строк из коллекции содержимого. Должно быть, я что-то упускаю. Любая помощь приветствуется.
Ответ №1:
Вам нужно будет вызвать метод Remove для соответствующего набора баз данных для каждого экземпляра объекта.
foreach(var content in campaign.Content)
{
dbContext.Contents.Remove(content);
}