Code First Migration Relationship and Insert?

1

I'm using UserManager to manage users, I'm using migration and I'm having relationship problem.

It turns out that I have the Cliente entity:

public class Cliente : IdentityUser
{
    [NotMapped]
    public string Senha { get; set; }

    [Required]
    public string NomeCompleto { get; set; }


    public virtual ICollection<Pedido> Pedidos { get; set; }

    // Telefone
    [Required]
    public virtual TelefoneCliente Telefone { get; set; }

    // Documento
    [Required]
    public virtual DocumentoCliente Documento { get; set; }

    // Endereço
    [Required]

    public virtual EnderecoCliente Endereco { get; set; }
}

Which has relationship 1 = 1 with EnderecoCustomer:

public class EnderecoCliente
{
    [Key, ForeignKey("Id")]
    public virtual Cliente Cliente { get; set; }

    public string Id { get; set; }
    [Required]
    public Estado Estado { get; set; }
    [Required]
    public Cidade Cidade { get; set; }
    [Required]
    public string CEP { get; set; }
    [Required]
    public string Bairro { get; set; }
    [Required]
    public string Rua { get; set; }
    [Required]
    public string Numero { get; set; }

    public string Complemento { get; set; }
}

And the ClientAddress is related to State and City that are fixed data in the table.

When I send the model with this structure the model and its relationships are ok, but it tries to include and insert an insert in the City and State table and obviously generates an error because that record already exists, what needs to be done is just add the id reference in the CustomerError table.

Code to enter the client

var result = await UserManager.CreateAsync(model, model.Senha);

Status:

public class Estado
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
    public int Id { get; set; }
    public string NomeEstado { get; set; }
}

City:

public class Cidade
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
    public int Id { get; set; }
    public string NomeCidade { get; set; }

    public Estado Estado { get; set; }
}

Can anyone help me?

@@ Edit

Follow me DBContext

public class EfDbContext : IdentityDbContext<Cliente>
{
    public EfDbContext() : base ("EFDbContext")
    {
        Configuration.LazyLoadingEnabled = false;
        Configuration.ProxyCreationEnabled = false;
    }

    public DbSet<Produto> Produtos { get; set; }
    public DbSet<Administrador> Administradores { get; set; }
    public DbSet<Cliente> Cliente { get; set; }

    public static EfDbContext Create()
    {
        return new EfDbContext();
    }

    public DbSet<Categoria> Categorias { get; set; }
    public DbSet<MarcaVitrine> MarcaVitrine { get; set; }
    public DbSet<ClubesNacionais> ClubesNacionais { get; set; }
    public DbSet<ClubesInternacionais> ClubesInternacionais { get; set; }
    public DbSet<FaixaEtaria> FaixasEtarias { get; set; }
    public DbSet<Genero> Generos { get; set; }
    public DbSet<Grupo> Grupos { get; set; }
    public DbSet<Marca> Marcas { get; set; }
    public DbSet<Modalidade> Modalidades { get; set; }
    public DbSet<SubGrupo> SubGrupos { get; set; }
    public DbSet<ProdutoVitrine> ProdutoVitrine { get; set; }
    public DbSet<QuironProduto> QuironProdutos { get; set; }
    public DbSet<Cor> Cores { get; set; }
    public DbSet<Tamanho> Tamanhos { get; set; }
    public DbSet<Estoque> Estoque { get; set; }
    public DbSet<ProdutoModelo> ProdutoModelo { get; set; }
    public DbSet<Cidade> Cidade { get; set; }
    public DbSet<Estado> Estado { get; set; }
    public DbSet<Pedido> Pedidos { get; set; }
    public DbSet<ProdutoPedido> ProdutosPedidos { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Entity<Produto>().ToTable("Produtos");
        modelBuilder.Entity<Administrador>().ToTable("Administradores");

        base.OnModelCreating(modelBuilder);
    }

}
    
asked by anonymous 27.01.2017 / 11:53

1 answer

0

I believe the problem is because the city and state entities are listed in context, try the following before calling UserManager.CreateAsync(model, model.Senha) :

if (UserManager.Entry(model.Cidade).State == EntityState.Detached)
    UserManager.Cidades.Atach(model.Cidade);

if (UserManager.Entry(model.Estado).State == EntityState.Detached)
    UserManager.Estados.Atach(model.Estado);

I do not know if this will solve your problem, because I do not know the code you are using in your DbContext (UserManager).

    
27.01.2017 / 12:17