首先使用ef代码从集合中删除行

时间:2011-10-10 07:12:51

标签: 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'AssocSet的关系处于'已删除'状态。给定多重性约束,相应的“Campaign_Content_Target”也必须处于“已删除”状态。

必须有一种方法可以从内容集合中删除行。我肯定错过了什么。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您将在每个实体实例的相应DbSet上调用Remove方法。

foreach(var content in campaign.Content)
{
    dbContext.Contents.Remove(content);
}