我有地点 - 带有相关标签:
拥有 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/