Есть некоторая таблица:
[Table("tags")]
public class Tag
{
[ScaffoldColumn(true)]
[StringLength(60)]
[Column("id")]
public string Id { get; set; }
/* другие поля */
public virtual ICollection<Tag> ParentTags { get; set; }
public virtual ICollection<Tag> ChildTags { get; set; }
}
Нужно связать одни элементы с другими как многие ко многим. Для этого есть таблица
tags_relations:
parent_tag_id character varying(60) NOT NULL,
child_tag_id character varying(60) NOT NULL,
и описание связи:
modelBuilder.Entity<Tag>()
.HasMany<Tag>(a => a.ParentTags)
.WithMany(a => a.ChildTags)
.Map(tt =>
{
tt.MapLeftKey("parent_tag_id");
tt.MapRightKey("child_tag_id");
tt.ToTable("tags_relations");
});
При сохранении в методе контроллера исключений нет, все ок:
public ActionResult Edit([Bind(Include ="Id,Title,Visible,Description")] Tag tag,string[] ParentTags)
{
if (ModelState.IsValid)
{
var parentTags = db.Tags.Where(a => ParentTags.Contains(a.Id)).ToList<Tag>();
tag.ParentTags = parentTags;
db.Entry(tag).State = EntityState.Modified;
db.SaveChanges();
}
var tags = db.Tags.Where(a => a.Visible == false).Select(c => new {
Id = c.Id,
Title = c.Title
}).ToList();
ViewBag.Tags = new MultiSelectList(tags, "Id", "Title");
return View(tag);
}
Но записей в таблице
tags_relations не появляется.
Что я делаю не так ?)
Еще вопрос, как можно отследить сгенерированный EF запрос?