Ich versuche, eine Viele-zu-Viele-Beziehung zu aktualisieren. Ich habe zwei Modelle, Tagebuch und Tags. Das Modelltagebuch enthält eine Liste von Tags und Tags enthält eine Liste von Terminkalendern. Aber immer wenn ich versuche, ein anderes Tag zu einer vorhandenen Liste hinzuzufügen oder ein bestehendes zu ändern, bekomme ich eine Ausnahme:EntityFramework - Aktualisieren von Viele-zu-viele-Beziehungen
Der Entitätstyp List_1 ist nicht Teil des Modells für den aktuellen Kontext.
Funktioniert meine Art der Aktualisierung sogar auf Sammlungen? Oder gibt es einen anderen Ansatz, den ich mir ansehen sollte?
Tagebuch Modell
public class Diary
{
[Key]
public int IdDiary { get; set; }
[Required(ErrorMessage = "This field is required")]
public string NameDiary { get; set; }
[Required(ErrorMessage = "This field is required")]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime CreationDate { get; set; }
public bool Locked { get; set; }
public ICollection<Entry> Entries { get; set; }
[DataType(DataType.MultilineText)]
[Required(ErrorMessage = "This field is required")]
public string Summary { get; set; }
public string ImageUrl { get; set; }
public ICollection<Tag> Tags { get; set; }
}
Einstiegsmodell
public class Entry
{
[Key]
public int IdEntry { get; set; }
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime CreationDate { get; set; }
[DataType(DataType.MultilineText)]
public string EntryText { get; set; }
[ForeignKey("Diary_IdDiary")]
public Diary Diary { get; set; }
public int Diary_IdDiary { get; set; }
public string EntryName { get; set; }
}
Tag Modell
public class Tag
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Diary> Diaries { get; set; }
}
Update-Methode
public void UpdateDiary(Diary updatedDiary)
{
var searchResult = SearchDiary(updatedDiary);
if (searchResult != null)
{
updatedDiary.IdDiary = searchResult.IdDiary;
_context.Entry(searchResult).CurrentValues.SetValues(updatedDiary);
_context.Entry(searchResult.Tags).CurrentValues.SetValues(updatedDiary.Tags);
_context.SaveChanges();
}
}
SearchDiary Methode
public Diary SearchDiary(Diary searchDiary)
{
var queryResult =
_context.Diaries.Include(d => d.Entries).Include(d => d.Tags)
.Where(d => (d.NameDiary == searchDiary.NameDiary && d.CreationDate == searchDiary.CreationDate) || d.IdDiary == searchDiary.IdDiary);
return queryResult.FirstOrDefault();
}
Danke
Statt 'öffentliche Liste Tags {get; einstellen; } 'go with' public ICollection Tags {get; einstellen; } '. Tun Sie dasselbe für "Einträge". –
@CristianSzpisjak Vielen Dank, aktualisiert die Modelle zu Ihrem Vorschlag. – Zazoe