Relación de uno a uno mediante Data Annotations:
Nuestra entidad Categoria será de la siguiente forma:
public class Categoria { public int Id { get; set; } [MaxLength(100)] public string Nombre { get; set; } [MaxLength(200)] public string Descripcion { get; set; } [Required] public virtual Producto Producto { get; set; } }
Entonces para nuestro ejemplo supondremos que un producto solo puede tener una categoría, y para configurar la relación a través de Data Annotations hacemos lo siguiente:
[Table("Productos")] public class Producto { [Key] public int Codigo { get; set; } [Required] [Column("Nombre", TypeName = "varchar", Order = 2)] public string Nombre { get; set; } [MaxLength(100), MinLength(10)] public string Descripcion { get; set; } [NotMapped] public string CodigoIso { get; set; } [ForeignKey("Categoria")] public int IdCategoria { get; set; } public virtual Categoria Categoria { get; set; } }
Como podemos ver en nuestra entidad Producto creamos una propiedad de tipo entero llamada IdCategoria, y la decoramos con el atributo ForeignKey el cual nos indica que esta propiedad nos servirá para relacionarla con otra entidad, y vemos que en su constructor especificamos la palabra "Categoria", que hace alusión a la propiedad virtual que nos sirve para configurar la relación con la entidad Categoria, de esta forma una vez se cree la base de datos se creara la relación de uno a uno.
Para probar esto podemos crear una aplicación de consola y escribir el siguiente código en la clase Program:
class Program { static void Main(string[] args) { var categoria = new Categoria { Id = 1, Nombre = "Lacteos", Descripcion = "Productos lacteos" }; var producto = new Producto { Codigo = 1, Nombre = "Leche", Descripcion = "Producto Lacteo", Categoria = categoria }; using (var contexto = new Context()) { contexto.Productos.Add(producto); contexto.SaveChanges(); } } }
Y observaremos que tan sólo agregando el producto a la base de datos también se agregara la categoría correspondiente en su respectiva tabla y con sus relaciones correspondientes. Ahora vamos a ver como lo podemos hacer pero esta vez usando Fluent Api.
Relación de uno a uno mediante Fluent Api:
Para configurar la relación a través de Fluent Api, creamos una clase de configuración para la entidad Categoria o lo hacemos directamente en el contexto como vimos en el artículo Configurando nuestras entidades de dominio con Fluent Api:
public class CategoriaMappings : EntityTypeConfiguration<Categoria> { public CategoriaMappings() { // Crear relación con la entidad Producto. this.HasRequired(c => c.Producto).WithRequiredPrincipal(e => e.Categoria); } }
Como vemos homologamos el código planteado anteriormente con Data Annotations, indicando que en la entidad categoría se requiere un producto y de igual forma en la entidad productos se requiere una categoría.
Y bueno amigos, eso es todo, espero les sea de utilidad y de interés este post acerca de relación uno a uno en Entity Framework code First, en próximos artículos observaremos cómo configurar otros tipos de relaciones.
Saludos y buena suerte!
Gracias amigo buen aporte, tenia un problema con dos entidades, relacion de uno a uno, hize lo que explicas y me funciono.
ResponderEliminarHola Oswaldo, que bueno que te resultó útil la explicación. saludos!
EliminarExcelente aporte a mi también me funciono
ResponderEliminarHola Reghis, que bueno que te resultó útil la explicación. saludos!
Eliminar