I have the following schema in my DB MySql:
Modelshavealistofstandard_imagesandeachstandard_imageshasastandard_regionslist.IneedtouseEntityFramework5.0.0.Ihaveatemplatewith3standard_imagesandeachonehas4standard_regions.IneedtodoanupdateonthistemplatewhereIwillremovestandard_region2and3fromstandard_image2.
To do the update, I'm going to the DB, searching for the ID of the model I want to change, and through a foreach I'll be sweeping the DB model and updating with the data coming from the GUI.
But how to do this update in this model when I need to remove a stdRegion, or a StdImg, that is, when there is a divergence between the lists that originally exist in the DB and the new data that the user wants to change, either adding or removing components of both lists?
The code to delete a standard_region is this:
public void AlterarModelo(Modelo modAlterado)
{
//Busca no BD o modelo a ser alterado
models modBanco = db.models.Find(modAlterado.id);
//apaga do banco caso não exista na lista passada via interface
foreach(var image in modBanco.standard_images)
{
List<standard_regions> lista = new List<standard_regions>();
foreach (var regiao in image.standard_regions)
{
foreach (var a in modAlterado.lstImagemPadrao)
{
if (a.lstRegiaoInteressePadrao.Count(x => x.id == regiao.id) == 0)
{
var regTemp = db.standard_regions.Find(regiao.id);
lista.Add(regTemp);
}
}
}
foreach (var reg in lista)
{
image.standard_regions.Remove(reg);
}
}
//adiciona caso não esteja no banco
foreach (var imgAlterado in modAlterado.lstImagemPadrao)
{
foreach (var imgBanco in modBanco.standard_images)
{
foreach (var regAlterado in imgAlterado.lstRegiaoInteressePadrao)
{
if (regAlterado.id == 0)
{
var regTemp = db.standard_regions.Find(regAlterado.id);
standard_regions sr = new standard_regions
{
coordinate = regAlterado.coordinate,
description = regAlterado.descricao,
standard_images_id = imgBanco.id
};
imgBanco.standard_regions.Add(sr);
}
}
}
}
modBanco.date = modAlterado.data;
db.SaveChanges();
}
The Model, PivotCode, and RegionInterestPadrao classes define the transfer objects where I bring the data changed by the user in the graphical interface:
public class Modelo
{
public int id { get; set; }
public string nomeModelo { get; set; }
public string statusModelo { get; set; }
public DateTime data { get; set; }
public Usuario usuario { get; set; }
public bool foiInspecionado { get; set; }
public ImagemPadraoColecao lstImagemPadrao { get; set; }
public Modelo()
{
lstImagemPadrao = new ImagemPadraoColecao();
usuario = new Usuario();
}
}
public class ImagemPadrao
{
public int id { get; set; }
public string nomeImagemPadrao { get; set; }
public string caminhoImagemPadrao { get; set; }
public Modelo modelo { get; set; }
public RegiaoInteressePadraoColecao lstRegiaoInteressePadrao { get; set; }
public ImagemPadrao()
{
lstRegiaoInteressePadrao = new RegiaoInteressePadraoColecao();
}
}
public class RegiaoInteressePadrao
{
public int id { get; set; }
public string descricao { get; set; }
public string coordinate { get; set; }
public int imagemPadraoId { get; set; }
}