2

假设我的模型看起来像这样(为简单起见,简化了):

public class Deal
    {
        [Key]
        public int DealId { get; set; }

        //one Deal may have many pictures
        public virtual List<Picture> Pictures { get; set; } 

        public Deal()
        {
            Pictures = new List<Picture>();
        }       
    }

每当我想从图片列表中删除特定图片时,我都会执行以下操作:

Deal deal = dealRepository.GetAll().Where(d => d.DealId == id).FirstOrDefault();
deal.Pictures.RemoveAll(p => p.Criterion.Equals(SomeCriterion));
unitOfWork.Commit();

看起来一切正常,但查看 dbms,我看到应该删除的记录仍然存在,它的外键设置为空。

有没有办法真正删除记录?

4

1 回答 1

2

您需要执行以下操作来删除记录:

foreach (var picture in deal.Pictures.Where(theCondition).ToList())
    dbContext.Set<Picture>().Remove(picture);

如果你有这样的属性,你可以使用dbContext.Pictures而不是.Set<Picture>()

当然,由于您已经在 DbContext(存储库)之上构建了一个额外的抽象,因此您需要在某处公开该调用。

于 2012-06-22T17:57:41.100 回答