none
Relación uno a uno EFCore RRS feed

  • Pregunta

  • Hola

    Trabajo con EFCore 3.1 tengo una relación uno a uno entre Inquilino y BaseDato

    Mis entidades son las siguientes

    Inquilino

    public class Inquilino
        {
            public int InquilinoId { get; set; }
            public string Nombre { get; set; }
            public string PlanServicio { get; set; }
    
            public virtual BaseDato BaseDato { get; set; }
        }

    BaseDato

    public class BaseDato
        {
            public int BaseDatoId { get; set; }
            public int ServidorId { get; set; }
            public int InquilinoId { get; set; }
            public string Nombre { get; set; }
            public string Estado { get; set; }
    
            public virtual Servidor Servidor { get; set; }
            public virtual Inquilino Inquilino { get; set; }
        }

    En Fluent Api

    public class InquilinoMap : IEntityTypeConfiguration<Inquilino>
        {
            public void Configure(EntityTypeBuilder<Inquilino> builder)
            {
                builder.ToTable("Inquilinos");
                builder.HasKey(c => c.InquilinoId);
                builder.Property(c => c.InquilinoId)
                    .ValueGeneratedOnAdd();
                builder.Property(c => c.Nombre).HasMaxLength(100);
                builder.Property(c => c.PlanServicio).HasMaxLength(200);
            }
        }
    
    public class BaseDatoMap : IEntityTypeConfiguration<BaseDato>
        {
            public void Configure(EntityTypeBuilder<BaseDato> builder)
            {
                builder.ToTable("BaseDatos");
                builder.HasKey(c => c.BaseDatoId);
                builder.Property(c => c.BaseDatoId)
                    .ValueGeneratedOnAdd();
                builder.HasOne(c => c.Servidor)
                    .WithMany(c => c.BaseDatos)
                    .HasForeignKey(c => c.ServidorId)
                    .OnDelete(DeleteBehavior.Restrict);
                builder.HasOne(c => c.Inquilino)
                    .WithOne(c => c.BaseDato)
                    .HasForeignKey<Inquilino>(c => c.InquilinoId)
                    .OnDelete(DeleteBehavior.Restrict);
                builder.Property(c => c.Nombre)
                    .HasMaxLength(100);
                builder.Property(c => c.Estado)
                    .HasMaxLength(100);
            }
        }

    Mi pregunta es la siguiente: ¿Al momento de ingresar los datos tengo que tratarlo como si fuera una sola tabla, ingresando Inquilino y BaseDato al mismo tiempo?

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    jueves, 25 de junio de 2020 22:06

Respuestas

  • hola

    Estas seguro que un servidor solo va a tener una unica base de datos? mm me suena raro

    cuando defines un servidor este podria tener muchas bases al mismo tiempo

    Si un Inquilino compra un servicio solo tendra una db, de verdad? cuando compra un hosting me creo un usuario y bajo ese plan pudo tener muchas bases al mismo tiempo

    >>¿Al momento de ingresar los datos tengo que tratarlo como si fuera una sola tabla, ingresando Inquilino y BaseDato al mismo tiempo?

    depende si es una relacion una a uno requerida o no

    Si defines la propiedad de relacion permite null

    Configure One-to-One Relationships using Fluent API in Entity Framework Core

    en el ejemplo define la propiedad AddressOfStudentId que usa en el HasForeignKey

    bueno si esa propiedad la definis nulable entonces sera opcional, o sea como "int?"

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Pedro Ávila viernes, 26 de junio de 2020 3:21
    jueves, 25 de junio de 2020 22:47

Todas las respuestas

  • hola

    Estas seguro que un servidor solo va a tener una unica base de datos? mm me suena raro

    cuando defines un servidor este podria tener muchas bases al mismo tiempo

    Si un Inquilino compra un servicio solo tendra una db, de verdad? cuando compra un hosting me creo un usuario y bajo ese plan pudo tener muchas bases al mismo tiempo

    >>¿Al momento de ingresar los datos tengo que tratarlo como si fuera una sola tabla, ingresando Inquilino y BaseDato al mismo tiempo?

    depende si es una relacion una a uno requerida o no

    Si defines la propiedad de relacion permite null

    Configure One-to-One Relationships using Fluent API in Entity Framework Core

    en el ejemplo define la propiedad AddressOfStudentId que usa en el HasForeignKey

    bueno si esa propiedad la definis nulable entonces sera opcional, o sea como "int?"

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta Pedro Ávila viernes, 26 de junio de 2020 3:21
    jueves, 25 de junio de 2020 22:47
  • Hola Leandro

    Es un inquilino una base de datos.

    Saludos!


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú

    viernes, 26 de junio de 2020 2:34
  • >>Es un inquilino una base de datos.

    ok quizas esa si sea la union

    pero la servidor con base de datos, me suena raro, si es que hablamos de servidores que tienen servicios de motores de base de datos, un Sql Server como servicio en un servidor puede alojar muchas bases al mismo tiempos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 26 de junio de 2020 3:49
  • Hola Pedro Ávila

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado. 

    Si es necesario, por favor abra un nuevo hilo. 

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

    Gabriel Castro
    viernes, 26 de junio de 2020 13:34
    Moderador