Solution: Finally I figure out what I needed to do, that was, simply clear languages list first. Now I can save job offer languages:
public void SaveJobOffer(JobOffer jobOffer)
{
if (jobOffer.ID == 0)
{
context.JobOffers.Add(jobOffer);
}
else
{
JobOffer existingJob = context.JobOffers.Find(jobOffer.ID);
existingJob.Client = jobOffer.Client;
(...)
existingJob.Languages.Clear();
existingJob.Languages = jobOffer.Languages;
}
context.SaveChanges();
}
I'm working on an ASP.NET MVC5 project using C# and Razor engine with Visual Studio.
I would like to know how can I save many-to-many relationships using Entity Framework. I have the following tables but only JobOffer
and Languages
appear in the Edmx file:
JobOffer
:
- Id
- Client
- ...
Jobffer_Languages
:
- JobOfferId
- LanguageId
- ...
Languages
:
- Id
- Name
- ...
To save a jobOffer I'm doing:
public void SaveJobOffer(JobOffer jobOffer)
{
if (jobOffer.ID == 0)
{
context.JobOffers.Add(jobOffer);
}
else
{
context.JobOffers.Attach(jobOffer);
context.Entry(jobOffer).State = EntityState.Modified;
context.SaveChanges();
}
}
But the languages are not saved. What do I need to do?
Thanks in advance
[EDIT]
My JobOffer controller code:
JobOffer jobOffer = new JobOffer();
jobOffer.ID = id;
...
var list = new List<Language>();
for (int i = 0; i < languages.Length; i++)
{
Language language = repository.GetLanguageById(languages[i]);
list.Add(language);
}
jobOffer.Languages = list;
repository.SaveJobOffer(jobOffer);