If, for obvious reasons, every city class will necessarily have a related uf property, would I need to declare the uf property also in the Address class?
If Endereco
belongs to a Cidade
, no.
What would be the most correct way to generate an View to register an address?
On a system I write, my Models looks like this:
[DisplayColumn("Descricao")]
[Table("Logradouros")]
public class Logradouro : IEntidade, IPesquisavel
{
[Key]
public Guid LogradouroId { get; set; }
public Guid BairroId { get; set; }
[Required]
[Index]
[MaxLength(450)]
public String Descricao { get; set; }
public String DescricaoFonetizado { get; set; }
[Index]
[DisplayName("CEP")]
public int Cep { get; set; }
public virtual Bairro Bairro { get; set; }
[DisplayName("Termo de Pesquisa")]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public String TermoPesquisa
{
get { return Descricao + ", " + Cep.ToString(); }
private set { }
}
[DisplayName("Última Modificação")]
public DateTime UltimaModificacao { get; set; }
[DisplayName("Data de Criação")]
public DateTime DataCriacao { get; set; }
[DisplayName("Usuário da Criação")]
public String UsuarioCriacao { get; set; }
[DisplayName("Usuário da Modificação")]
public String UsuarioModificacao { get; set; }
}
[DisplayColumn("Nome")]
[Table("Bairros")]
public class Bairro : IEntidade, IPesquisavel
{
[Key]
public Guid BairroId { get; set; }
public Guid CidadeId { get; set; }
[Required]
[Index]
[MaxLength(450)]
public String Nome { get; set; }
public String NomeAbreviado { get; set; }
public String NomeFonetizado { get; set; }
public virtual Cidade Cidade { get; set; }
[JsonIgnore]
public virtual ICollection<Logradouro> Logradouros { get; set; }
[JsonIgnore]
public virtual ICollection<AgenciaBancaria> AgenciasBancarias { get; set; }
[JsonIgnore]
public virtual ICollection<ClientePrevidenciario> ClientesPrevidenciario { get; set; }
[JsonIgnore]
public virtual ICollection<Reclamante> Reclamantes { get; set; }
[DisplayName("Termo de Pesquisa")]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public String TermoPesquisa
{
get { return Nome; }
private set { }
}
[DisplayName("Última Modificação")]
public DateTime UltimaModificacao { get; set; }
[DisplayName("Data de Criação")]
public DateTime DataCriacao { get; set; }
[DisplayName("Usuário da Criação")]
public String UsuarioCriacao { get; set; }
[DisplayName("Usuário da Modificação")]
public String UsuarioModificacao { get; set; }
}
[Table("Cidades")]
public class Cidade : IEntidade, IPesquisavel
{
[Key]
public Guid CidadeId { get; set; }
[DisplayName("Estado")]
public Guid EstadoId { get; set; }
[DisplayName("Código da Cidade no SAPC")]
public int RcrCidadeId { get; set; }
[Required(ErrorMessage = "O nome da cidade é obrigatório.")]
[DisplayName("Nome")]
[Index]
[MaxLength(450)]
public String Nome { get; set; }
[DisplayName("Código no IBGE")]
public int CodigoIbge { get; set; }
[DisplayName("Código no SIAFI")]
public int CodigoSiafi { get; set; }
[DisplayName("CEP")]
public int? Cep { get; set; }
[JsonIgnore]
public virtual Estado Estado { get; set; }
[JsonIgnore]
public virtual ICollection<Bairro> Bairros { get; set; }
[JsonIgnore]
public virtual ICollection<ClientePrevidenciario> ClientesPrevidenciario { get; set; }
[JsonIgnore]
public virtual ICollection<Reclamante> Reclamantes { get; set; }
[JsonIgnore]
public virtual ICollection<Foro> Foros { get; set; }
[JsonIgnore]
public virtual ICollection<Tribunal> Tribunais { get; set; }
[DisplayName("Termo de Pesquisa")]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public String TermoPesquisa
{
get { return Nome; }
private set { }
}
[DisplayName("Última Modificação")]
public DateTime UltimaModificacao { get; set; }
[DisplayName("Data de Criação")]
public DateTime DataCriacao { get; set; }
[DisplayName("Usuário da Criação")]
public String UsuarioCriacao { get; set; }
[DisplayName("Usuário da Modificação")]
public String UsuarioModificacao { get; set; }
}
[Table("Estados")]
public class Estado : IEntidade, IPesquisavel
{
[Key]
public Guid EstadoId { get; set; }
[DisplayName("País")]
public Guid PaisId { get; set; }
[Required(ErrorMessage = "O nome do país é obrigatório.")]
[DisplayName("Nome")]
public String Nome { get; set; }
[Required(ErrorMessage = "A sigla do país é obrigatória.")]
[DisplayName("Sigla")]
public String Sigla { get; set; }
public virtual Pais Pais { get; set; }
public virtual ICollection<Cidade> Cidades { get; set; }
[DisplayName("Termo de Pesquisa")]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public String TermoPesquisa
{
get { return Nome; }
private set { }
}
[DisplayName("Última Modificação")]
public DateTime UltimaModificacao { get; set; }
[DisplayName("Data de Criação")]
public DateTime DataCriacao { get; set; }
[DisplayName("Usuário da Criação")]
public String UsuarioCriacao { get; set; }
[DisplayName("Usuário da Modificação")]
public String UsuarioModificacao { get; set; }
}
[Table("Paises")]
public class Pais : IEntidade, IPesquisavel
{
[Key]
public Guid PaisId { get; set; }
[Required(ErrorMessage = "O nome do país é obrigatório.")]
[DisplayName("Nome")]
public String Nome { get; set; }
[Required(ErrorMessage = "A sigla do país é obrigatória.")]
[DisplayName("Sigla")]
public String Sigla { get; set; }
public virtual ICollection<Estado> Estados { get; set; }
[DisplayName("Termo de Pesquisa")]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public String TermoPesquisa
{
get { return Nome; }
private set { }
}
[DisplayName("Última Modificação")]
public DateTime UltimaModificacao { get; set; }
[DisplayName("Data de Criação")]
public DateTime DataCriacao { get; set; }
[DisplayName("Usuário da Criação")]
public String UsuarioCriacao { get; set; }
[DisplayName("Usuário da Modificação")]
public String UsuarioModificacao { get; set; }
}
An address would be linked to a neighborhood, which would be linked to a city, which would be linked to a state, which would be connected to a country.
And that would not "make it difficult," for example, a client query of a particular state?
No, because using the Entity Framework you can search like this:
var enderecos = db.Enderecos.Where(e => e.Bairro.Cidade.EstadoId == id);