0
I have a model where a client has one or many Systems, and a System has one or many Customers: N:M
I’m having a problem adding a new one SISTEMA, for my cliente
My Model looks like this:
public  class Cliente : Pessoa
{
 public virtual ICollection<TipoDeSistemas> TipoDeSistemas { get; set; }
 public void AdicionarSistema(TipoDeSistemas tipoDeSistemas)
   {
            TipoDeSistemas.Add(tipoDeSistemas);
   }
}
public class TipoDeSistemas
{
 public virtual ICollection<Cliente> Cliente { get; set; }
{
In my layer of service I do so:
public void adicionarSistema(ClienteViewModel cliente, List<Guid> tipoDeSistemasId)
{
  var c = _clienteRepositorio.BuscarPorId(cliente.ClienteId);
// c => é o cliente vindo do banco
 foreach (var sistema in tipoDeSistemasId)
 {
  var ts = _tipoDeSistemaRepositorio.BuscarPorId(sistema);
   c.AdicionarSistema(ts);
 }
_clienteRepositorio.Atualizar(c);
}
You are not adding a new system to the table that receives the n:m
I don’t know if I did the mapping wrong.
It’s like this:
 public class ClienteConfig : EntityTypeConfiguration<Cliente>
 {
         public ClienteConfig()
        {
         HasMany(c => c.TipoDeSistemas)
                .WithMany()
                .Map(m =>
                {
                    m.MapLeftKey("Cliente_ClienteId");
                    m.MapRightKey("TipoDeSistema_SitemaId");
                    m.ToTable("Sistema_Cliente");
                });
        }
 }
I changed the map, and I left it like this, to see if that’s it:
  public class ClienteConfig : EntityTypeConfiguration<Cliente>
    {
        public ClienteConfig()
        {
        HasMany(c => c.TipoDeSistemas)
                .WithMany(c => c.Cliente);
        }
    }
and did the same thing in the System configuration:
public class TipoDeSistemaConfig: EntityTypeConfiguration<TipoDeSistemas>
    {
        public TipoDeSistemaConfig()
        {
            HasMany(t => t.Cliente)
                .WithMany(t => t.TipoDeSistemas);
        }
    }
But still, it still doesn’t add the System(s) to the customer.
I debugged the code, and checked, that in my repository is coming the added system Cliente.TipoDeSistema.Count(1)
the repository Atulizar esta Assim:
public virtual void Atualizar(TEntidade obj)
        {
            var entry = Db.Entry(obj);
            DbSet.Attach(obj);
            entry.State = EntityState.Modified;
            SaveChanges();
        }
it goes through this method normally, saved, and returns, everything that comes in OBJ updates, but it does not add sistema_cliente, in the table that receives the N:M
No error, but tbm does not save the system(s) to the customer in the bank.
I tried using DAO, and theoretically, it’s working.
I am inserting straight into the table that receives the N:M
I don’t know if it’s good practice, but it momentarily solved the problem. since using Entity did not add.
Class Clientedao:
 public void Inserir(Cliente cliente, TipoDeSistemas tipoDeSistemas)
        {
            SqlCommand comando = new SqlCommand();
            comando.CommandType = CommandType.Text;
            comando.CommandText = "insert into ClienteTipoDeSistemas(Cliente_ClienteId, TipoDeSistemas_TipoDeSistemasId) values(@Cliente_ClienteId, @TipoDeSistemas_TipoDeSistemasId)";
            comando.Parameters.AddWithValue("@Cliente_ClienteId",cliente.ClienteId);
            comando.Parameters.AddWithValue("@TipoDeSistemas_TipoDeSistemasId", tipoDeSistemas.TipoDeSistemasId);
            Conexao con = new Conexao();
            con.Crud(comando);
        }
						
How come you don’t save and you don’t make a mistake? You didn’t miss a
SaveChanges()on the way?– Leandro Angelo
I edited the question, and put the method
ATUALIZAR– Rafael Passos
I didn’t understand that line
entry.State = EntityState.Modified;... at that point if the state is no longer as modified, it already has a problem. Something wrong with your Mapping or with your methodAdicionarSistema()– Leandro Angelo
Not that part, no, because I tried so tbm
db.Entry(cs).State = EntityState.Modified;
 db.SaveChanges();and even then does not add the system in the client– Rafael Passos
In fact, I removed the responsibility of adding the method, and used the
addright in the service:TipoDeSistemas ts = _tipoDeSistemaRepositorio.BuscarPorId(sistema);
 cliente.TipoDeSistemas.Add(ts);– Rafael Passos