Я новичок в работе с фреймами MVC и Entity, но я столкнулся с проблемой, и я не уверен, как ее решить, некоторые рекомендации более чем приветствуются.Я редактирую объект, у которого есть подсписок различных объектов.У меня есть рабочий экран редактирования, но я не могу получить информацию, сохраненную в базе данных.Я думаю, что проблема заключается в контексте БД, но, как я уже сказал, я новичок в этом.Вот 2 класса, которые я использую:
public class Role
{
[Key]
public string Role { get; set; }
public virtual ICollection<Template> Templates { get; set; }
}
public class Template
{
[Key][Required]
public string TemplateID { get; set; }
[Required]
public string Header { get; set; }
[Required][DataType(DataType.MultilineText)]
public string Description { get; set; }
public virtual ICollection<CorrespondenceRole> Roles { get; set; }
}
У меня также есть это в моем контексте
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Template>()
.HasMany(c => c.Roles)
.WithMany(c => c.Templates)
.Map(m => m.ToTable("Template_Roles")
.MapLeftKey("TemplateID")
.MapRightKey("Role"));
}
Если я использую
public ActionResult Edit(Template ctemplate)
{
db.Entry(ctemplate).State = EntityState.Modified;
db.SaveChanges();
}
Изменения вобъект шаблона записывается в базу данных, но любые изменения в списке ролей полностью игнорируются, даже если я хардкод ctemplate.roles.add (somerole) перед сохранением БД.
Однако, если я использую
public ActionResult Edit(Template ctemplate)
{
Template ct = db.Templates.Find(ctemplate.TemplateID);
ct.Roles.Add(db.Roles.Find("Other Party"));
db.Entry(ct).State = EntityState.Modified;
db.SaveChanges();
}
«Роль» сохраняется в шаблоне в базе данных.Так что я мог бы использовать этот код, чтобы найти объект, затем скопировать в него все поля формы и сохранить его, но кажется, что он выглядит сложным, когда первый вариант действительно работает, но он просто не сохраняет мой список.Любые комментарии или предложения, как лучше сохранить изменения объекта и связанный с ним список различных объектов?Спасибо.
ОБНОВЛЕНИЕ Я обнаружил, что это сработало для меня, но я понятия не имею, лучший ли это способ сделать это.
db.Entry(ct).State = EntityState.Modified;
foreach (var entity in db.Roles.Where(cr => cr.TemplateID == ct.ID))
db.Roles.Remove(entity);
foreach (Role cr in ct.Roles)
db.Roles.Add(cr);
db.SaveChanges();