Meu caro, com sua edição muda algumas coisas: No modo 1:1 no ORM Entity Framework existem possibilidades, mas, pelo que eu entendi é um relacionamento 1 para 1 com agregação de uma delas, segue exemplo completo e funcional:
Classe Aluno
[Table("Alunos")]
public class Aluno
{
public Aluno()
{
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int AlunoId { get; set; }
[Required]
[MaxLength(50)]
public string Nome { get; set; }
[ForeignKey("AlunoId")]
public virtual Endereco Endereco { get; set; }
}
Classe Endereco
[Table("Enderecos")]
public class Endereco
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int AlunoId { get; set; }
[Required]
[MaxLength(50)]
public string Rua { get; set; }
[Required]
[MaxLength(20)]
public string Numero { get; set; }
[Required,ForeignKey("AlunoId")]
public virtual Aluno Aluno { get; set; }
}
Classe Endereco depende da classe Aluno aonde o relacionamento é 1:1 ou 1:0, ou seja, para que Endereco funcione tem que existir Aluno.
Classe Database que herda de DbContext do ORM EntityFramework 6.3.1
public class Database: DbContext
{
public Database()
:base("conn")
{
}
public DbSet<Aluno> Alunos { get; set; }
public DbSet<Endereco> Enderecos { get; set; }
}
Como gravar:
using (Database db = new Database())
{
Aluno aluno = new Aluno();
aluno.Nome = "Guj";
aluno.Endereco = new Endereco();
aluno.Endereco.Numero = "Rua dos Guj";
aluno.Endereco.Rua = "s/n";
aluno.Endereco.Aluno = aluno;
db.Alunos.Add(aluno);
db.SaveChanges();
}
As outras operações são parecidas, só tome cuidado na hora da edição não setar nada no endereço se ele contiver na sua base, se ele for igual a null (que é o caso especifico do cadastro) tem que jogar uma instância e preencher passando a relação.