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

时间:2013-06-06 04:03:13

标签: 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; }

和相关的Tag模型:

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; }

多对多的关系。

例如,一个地方可以有一个'bar'和一个'cafe'标签。 (许多地方也可能有这些标签)。

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

此外 - 如果我尝试使用相关标签保存地点模型 - 地点已更新但不会更新标签 - 我该怎么做?

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

感谢。

1 个答案:

答案 0 :(得分:3)

只有当你知道什么以及为什么要这样做时,你才应该使用微观管理与实体的实体状态。

在这种情况下,您应该将其控制到实体框架。

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

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

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