2

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

有一个地方模型:

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();

谢谢。

4

1 回答 1

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为新集合。您只能添加、删除和清除。如果要删除或清除此集合,则应先从数据库中加载它。

于 2013-06-06T05:13:17.043 回答