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…我所需要的是以什么方式从新闻中删除关联的类别?错误?