asp.net - Linq to Entities - 删除/添加相关数据(多对多关系)

标签 asp.net asp.net-mvc linq entity-framework entity-framework-5

我有地点 - 带有相关标签:

拥有 Place 模型:

public virtual int PlaceID { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
public virtual string Name { get; set; }

以及相关的标签模型:

public virtual int TagID { get; set; }
public virtual string Name { get; set; }
public virtual string NamePlural { get; set; }
public virtual ICollection<Place> Places { get; set; }

多对多关系。

例如,一个地方可以有“酒吧”和“咖啡馆”标签。 (很多地方也可能有这些标签)。

我可以添加带有相关标签的地点。但是,如何使用 Linq 操作与地点相关的标签? (添加/删除/编辑)。

另外 - 如果我尝试保存带有相关标签的地点模型 - 地点会更新但标签不会 - 我该怎么做?

place.Tags = SelectedTags
db.Entry(ptvm.place).State = EntityState.Modified;
db.SaveChanges();

谢谢。

最佳答案

只有当您知道自己在做什么以及为什么做时,才应该对实体的实体状态使用微观管理。

在这种情况下,您应该将其控制权交给 Entity Framework 。

        db.Places.Attach(place);
        context.Entry(place).Collection(p => p.Tags).Load();

        foreach(var tag in SelectedTags)
        {
            place.Tags.Add(tag);
        }            
        db.SaveChanges();

附加说明:您无法将导航属性 ICollection 更改为新集合。您只能添加、删除和清除。如果您想删除或清除此集合,您应该先从数据库加载它。

关于asp.net - Linq to Entities - 删除/添加相关数据(多对多关系),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16953508/

相关文章:

c# - 使用 ASP.NET MVC 的 ViewBag foreach 循环中图像滑动不起作用

asp.net-mvc - Visual Studio : The system cannot find the path specified

asp.net-mvc - 我的MVC 5 Visual Studio 2013中的 "Create strongly-typed view"菜单选项在哪里

c# - md5-encrypted string 从数据库返回不同于插入

javascript - 获取 Gridview 选中项目的列表

javascript - 按需执行 jQuery 效果。是否可以?

javascript - 在 ASP.Net MVC 5 应用程序中访问页面时如何保持事件菜单项突出显示?

LINQ 扩展方法 .SelectMany() 以另一种形式编写

c# - 如何通过混合值和键将字典转换为列表?

c# - 递归 LINQ 调用