【发布时间】: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#