我有地方 - 带有相关标签:
有一个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();
感谢。
答案 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
更改为新集合。您只能添加,删除和清除。如果要删除或清除此集合,则应在之前从数据库中加载它。