Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除不再在收藏中的项目的最佳方法_C#_Entity Framework_Collections - Fatal编程技术网

C# 删除不再在收藏中的项目的最佳方法

C# 删除不再在收藏中的项目的最佳方法,c#,entity-framework,collections,C#,Entity Framework,Collections,我的数据库中有一个经典订单项目: public partial class ORDERS { public ORDERS() { this.ORDER_DETAIL = new HashSet<ORDER_DETAIL>(); } public int ORDER_IDE { get; set; } public string ORDER_STATE { get; set; } public decimal ORDER

我的数据库中有一个经典订单项目:

public partial class ORDERS
{
    public ORDERS()
    {
        this.ORDER_DETAIL = new HashSet<ORDER_DETAIL>();
    }

    public int ORDER_IDE { get; set; }
    public string ORDER_STATE { get; set; }
    public decimal ORDER_TOTAL { get; set; }
    public decimal ORDER_TAXES { get; set; }
    public decimal ORDER_SHIPPING_COST { get; set; }
    public decimal ORDER_HANDLING_COST { get; set; }
    public Nullable<System.DateTime> ORDER_SHIPPING_DATE { get; set; }
    public string ORDER_BILLING_NAME { get; set; }
    public string ORDER_BILLING_ADDRESS { get; set; }
    public string ORDER_BILLING_CITY { get; set; }
    public string ORDER_BILLING_REGION { get; set; }
    public string ORDER_BILLING_COUNTRY { get; set; }
    public string ORDER_BILLING_POSTAL_CODE { get; set; }
    public string ORDER_SHIPPING_NAME { get; set; }
    public string ORDER_SHIPPING_ADDRESS { get; set; }
    public string ORDER_SHIPPING_CITY { get; set; }
    public string ORDER_SHIPPING_REGION { get; set; }
    public string ORDER_SHIPPING_COUNTRY { get; set; }
    public string ORDER_SHIPPING_POSTAL_CODE { get; set; }
    public string ORDER_COMMENT { get; set; }
    public decimal ORDER_DETAIL_AMOUNT { get; set; }
    public string ORDER_DESCRIPTION { get; set; }
    public decimal ORDER_DISCOUNT { get; set; }

    public virtual ICollection<ORDER_DETAIL> ORDER_DETAIL { get; set; }
}
因此,如果我的原始订单有3个项目,而我的新订单有8个项目,并且从这个订单中删除了原始订单的2个项目,我需要做什么才能有效地只保留8个新项目?我是否需要遍历所有这些文件以查看哪些文件存在,哪些文件不再存在

编辑

我找到了一个解决方案,它并不优雅,而且需要一点过程:

foreach (var orderDetail in originalOrder.ORDER_DETAIL.ToList())
{
    mDb.ORDER_DETAIL.Remove(orderDetail);

    mDb.SaveChanges();
}

foreach (var orderDetail in orderToSave.ORDER_DETAIL)
{
    mDb.ORDER_DETAIL.Add(orderDetail);

    mDb.SaveChanges();
}

这意味着在添加新的ORDER_DETAIL对象之前,我会刷新所有旧的ORDER_DETAIL对象,但我仍在寻找一种更优雅/更好的方法。

通常我会以与您相同的方式进行操作,但我会检查该项是否位于新的ORDER_DETAIL对象上,并且只添加和删除更改的项。它增加了一些优雅,因为您可以使用Linq表达式

大意是:

foreach (var orderDetail in originalOrder.ORDER_DETAIL.Where(d => !newOrder.ORDER_DETAIL.Contains(d)).ToList())
{
    mDb.ORDER_DETAIL.Remove(orderDetail);

    mDb.SaveChanges();
}
foreach (var orderDetail in originalOrder.ORDER_DETAIL.Where(d => !newOrder.ORDER_DETAIL.Contains(d)).ToList())
{
    mDb.ORDER_DETAIL.Remove(orderDetail);

    mDb.SaveChanges();
}