【问题标题】:Deleting Child Entries when deleting parent删除父项时删除子项
【发布时间】:2018-05-14 17:11:59
【问题描述】:

我已经阅读了各种帖子,但似乎没有一个与我的问题相符。 删除父项时,我需要删除链接到外键的子项。

目前我有这个代码:

public async Task UpdateLineItemByOrderLineId(int orderLineId, int newQuantity)
    {
        var clientBasket = await GetBasketAsync();
        var lineItem = clientBasket.OrderLines.FirstOrDefault(x => x.OrderLineId == orderLineId);
        if (newQuantity == 0)
        {
            _orderLinesRepository.Delete(lineItem);
            _orderLinesRepository.Save();
        }

这链接到以下存储库

public class OrderLinesRepository : GenericRepository<OrderLine>, IOrderLinesRepository
    {
        public OrderLinesRepository(IDbContextFactory dbContextFactory)
            : base(dbContextFactory)
        {
        }
    }

帖子似乎提到了实体框架等,当我从交给我完成的解决方案中学习 C# 时,我没有看到反映 EF 的匹配代码。

我不一定需要删除子元素,只需将 ForeignKey 设置为 null。需要注意的一件事是,我可以将多个子条目链接到 ForeignKey。

实现上述目标的正确实现是什么?

编辑:外键分配

    namespace TSW.Ecommerce.Data.Api
{
    public class OrderDelegate
    {
        [Key]
        public int OrderDelegateId { get; set; }
        [ForeignKey("OrderLineId")]
        public virtual OrderLine OrderLine { get; set; }
        public int? OrderLineId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
    }
}

【问题讨论】:

  • 正确的实现是用on delete cascade设置主键,让数据库为你做繁重的工作。
  • 您可以在 EF 配置中做同样的事情,但我同意 Zohar。让数据库来处理它。
  • Opps,重新审视这个问题,我看到我写了primary key,我应该写foreign key...对不起。
  • @ZoharPeled 我已经更新了我如何分配外键的帖子。我如何在此处包含删除级联?
  • 我不知道如何使用 EF。我可以轻松地指导您如何在 SQL 中执行此操作,但我猜快速搜索也可以显示如何使用 EF 执行此操作 - 这里是 one post on SO

标签: c#


【解决方案1】:

正确的解决方案是:

foreach (var m in lineItem.DelegatesList.Where(f=>f.OrderLineId == orderLineId))
        {
          lineItem.DelegatesList.Remove(m);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2014-07-18
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多