I'm currently building a RestAPI using EF 6 Code First, I got a couple of models which have some relations.
I've managed to successfully add items and all that, but now I'm building a "Update"-function, which aren't going well.
I currently got this code, and it does infact update the row, but on the columns with relations it simply adds new rows instead of using the existing...
DatabaseController
public void UpdateDatabase(int id, DatabaseItem db)
{
using (var databasesCtx = new DatabaseContext())
{
DatabaseItem existing = databasesCtx.Databases.Include(a => a.Subjects).Include(a => a.Types).FirstOrDefault(d => d.Id == id);
if(existing != null)
{
List<DatabaseSubject> subjects = GetAllSubjects();
List<DatabaseType> types = GetAllTypes();
db.Subjects = subjects.Where(s => db.Subjects.Select(b => b.Id).ToList().Contains(s.Id)).ToList();
db.Types = types.Where(t => db.Types.Select(b => b.Id).ToList().Contains(t.Id)).ToList();
databasesCtx.Entry(existing).CurrentValues.SetValues(db);
databasesCtx.SaveChanges();
}
}
}
DatabaseItem - Class
public class DatabaseItem
{
public int Id { get; set; }
public virtual ICollection<DatabaseSubject> Subjects { get; set; }
public byte[] Icon { get; set; }
public virtual ICollection<DatabaseType> Types { get; set; }
public string Description { get; set; }
[Required]
public Boolean Public { get; set; }
}
DatabaseSubject - Class
public class DatabaseSubject
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<DatabaseItem> Databases { get; set; }
}
DatabaseType - Class
public class DatabaseType
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<DatabaseItem> Databases { get; set; }
}