Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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_Linq - Fatal编程技术网

C# 实体框架:删除子实体

C# 实体框架:删除子实体,c#,entity-framework,linq,C#,Entity Framework,Linq,我正在尝试从新闻中删除类别对象,但它不起作用 我的代码如下所示: var OriginalCategoriesIds = db.News.Where(w => w.NewsId == 1) .SelectMany(v => v.Categories) .ToList(); News NewsToUpdate = new News() { News

我正在尝试从新闻中删除类别对象,但它不起作用

我的代码如下所示:

var OriginalCategoriesIds = db.News.Where(w => w.NewsId == 1)
                                   .SelectMany(v => v.Categories)
                                   .ToList();
News NewsToUpdate = new News() { NewsId = 1 };
db.News.Attach(NewsToUpdate);

foreach (var category in OriginalCategoriesIds)
{
    if (!model.SelectedCategoriesIds.Contains(category.CategoryId))
    {
        NewsToUpdate.Categories.Remove(category);
    }
}

db.SaveChanges();
这是你的问题:

var OriginalCategoriesIds = db.News.Where(w => w.NewsId == 1).SelectMany(v => v.Categories).ToList();
                            News NewsToUpdate = new News() { NewsId = 1 };
                            db.News.Attach(NewsToUpdate);

                            foreach (var category in OriginalCategoriesIds)
                            {
                                if (!model.SelectedCategoriesIds.Contains(category.CategoryId))
                                {
                                    db.News.Categories.Remove(category);// <---change like this
                                }

                            }

                            db.SaveChanges();
var OriginalCategoriesIds=db.News.Where(w=>w.NewsId==1)。选择many(v=>v.Categories)。ToList();
News NewsToUpdate=News(){NewsId=1};
db.News.Attach(NewsToUpdate);
foreach(原始分类ID中的var类别)
{
如果(!model.selectedCategoriseId.Contains(category.CategoryId))
{

db.News.Categories.Remove(类别);//EF应该足够聪明,可以查看您更新的实体,并根据存在的实体知道要删除哪些实体。与其检查哪些实体不再属于,不如检查哪些实体属于。理论上,它应该正确同步。此外,您很可能还想检查添加的实体中哪些实体不存在。而不是加载从新闻中现有的类别ID,只需加载现在附加的所有ID,然后将它们全部添加到

   News NewsToUpdate = new News() { NewsId = 1 };
   var updatedCategoryIds = model.SelectedCategoriesIds;
   NewsToUpdate.Categories.AddRange(db.Categories.Where(c => updatedCategoryIds.Contains(c.CategoryId));
   db.News.Attach(NewsToUpdate);
   db.SaveChanges();

任何
错误
异常
?我希望这会在删除时出错。您刚刚初始化了
NewsToUpdate
变量,没有放入任何
类别
,也没有初始化它,所以我不知道为什么它会有任何
类别
要删除。@stephen.vakil,谢谢您的帮助:),是的你是对的,我实际上是实体框架的新手,你能告诉我如何在不从数据库加载新闻的情况下从association News对象中删除类别吗?非常确定这将从根categories表中删除项目,而不是从新闻与类别的关联中删除项目。我认为目的是更新新闻项目和更新类别列表。与其删除不存在的类别,不如添加仍然存在的类别,然后更新将删除缺少的类别。这是怎么回事
db.News.categories.remove(category)
@stephen.vakil我认为仍然没有达到目的。这样它将扫描所有类别表以添加所选ID…我所需要的是以什么方式从新闻中删除关联的类别?错误?