Witam,
Mam pewną tabelę o nazwie "Links" oraz tabele "Subjects", pomiędzy nimi jest dodatkowo tabela tworząca relacje wiele-do-wielu o nazwie "SubjectsInLinks".
Modele mam wygenerowane poprzez Entity Data Model, a moja klasa serwisowa mam metodę obsługująca dodanie nowego wpisu w tabeli "Links".
Problem tkwi w tym że aplikacja przewiduje dodanie wpisu do tabeli links pod warunkiem ze będzie dodany razem z nim przynajmniej jeden wpis w tabeli "SubjectsInLinks", nie mogę zrobić tego jednym zapytaniem ponieważ najpierw trzeba utworzyć wpis w tabeli "Links" ponieważ gdy on jeszcze nie istnieje nie mogę dodać wpisu do tabeli "SubjectsInLinks", jak to ugryźć?
Zastanawiałem się nad pobraniem ostatniego dodanego wpisu links i wtedy do niego dodanie referencji w tabeli "SubjectsInLinks" ale czy to dobre rozwiązanie?
Poniżej moja metoda która oczywiście nie działa poprawnie jednak prezentuje mój problem:
public void AddLink(LinkViewModel obj)
{
if (obj != null)
{
using (var db = _context.CreateNew())
{
var subjects = db.Subjects.Where(x => obj.Subjects
.Select(y => y.SubjectId)
.ToList()
.Contains(x.Subject_Id)).ToList();
if (subjects.Count > 0)
{
var objNew = new Links
{
SubjectsInWeek = obj.SubjectsInWeek,
SubjectsInDay = obj.SubjectsInDay,
Subjects = subjects
};
db.Links.Add(objNew);
db.SaveChanges();
}
}
}
}
Dla łatwiejsze wizualizacji umieszczam też modele tabel EF:
public partial class Subjects
{
public Subjects()
{
this.Links = new HashSet<Links>();
}
public int Subject_Id { get; set; }
public int UserId { get; set; }
public int TypeSchool { get; set; }
public string Name { get; set; }
public string ShortName { get; set; }
public bool GroupLeader { get; set; }
public virtual ICollection<Links> Links { get; set; }
}
public partial class Links
{
public Links()
{
this.Subjects = new HashSet<Subjects>();
}
public int Link_Id { get; set; }
public int SubjectsInWeek { get; set; }
public int SubjectsInDay { get; set; }
public virtual ICollection<Subjects> Subjects { get; set; }
}
P.S.
var objNew = new Links
{
SubjectsInWeek = obj.SubjectsInWeek,
SubjectsInDay = obj.SubjectsInDay,
};
db.Links.Add(objNew);
db.SaveChanges();
var idLink = db.Links.Max(x => x.Link_Id);
var link = db.Links.SingleOrDefault(x => x.Link_Id == idLink);
if (link != null)
{
var idSubjects = obj.Subjects.Select(y => y.SubjectId).ToList();
var subjects = db.Subjects.Where(x => idSubjects.Contains(x.Subject_Id)).ToList();
foreach (var sub in subjects)
{
link.Subjects.Add(sub);
}
db.SaveChanges();
}
Też nie działa ;/