Удаление строк из коллекции сначала с помощью кода ef - PullRequest
0 голосов
/ 10 октября 2011

У меня есть следующая модель домена:

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();

Это не удаляет строки содержимого из базы данных.Фактически он устанавливает внешний ключ в таблице содержимого равным нулю для затронутых строк, но не удаляет строки.

Затем я попытался изменить конфигурацию следующим образом:

modelBuilder.Entity<Campaign>().HasMany(x => x.Content).WithRequired();

Это будетпросто предоставьте мне следующее исключение: отношение из набора ассоциаций Campaign_Content находится в состоянии «удалено».С учетом ограничений на множественность соответствующий Campaign_Content_Target также должен находиться в состоянии «Удалено».

Должен быть способ удаления строк из коллекции содержимого.Я должен что-то упустить.Любая помощь приветствуется.

1 Ответ

1 голос
/ 10 октября 2011

Вам нужно будет вызвать метод Remove в соответствующем DbSet для каждого экземпляра сущности.

foreach(var content in campaign.Content)
{
    dbContext.Contents.Remove(content);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...