Código de Entity Framework Primera relación uno-a-uno requerido-requerido

Cuando se utiliza el código de Entity Framework First 4.3.1, es posible crear relaciones con una multiplicidad de 1 a 1. Es decir, una entidad en cada extremo de la relación.

Es posible configurar relaciones 1 a 1 para serrequerido requerido requerido oobligatorio-opcional ^. Sin embargo, cuando cambio entre los dos no veo ninguna diferencia en:

El esquema de base de datos generado. Estoy apuntando a SQL Server 2008.El comportamiento en tiempo de ejecución de EF.

Como tal, soy capaz de crear unaRequiredPrincipalAs grabar sin un correspondienteRequiredDependentAs registro, a pesar de que la relación se configura comorequerido requerido requerido. Esto parece contradecir la documentación deHa requerido (...):

Configura una relación requerida de este tipo de entidad. Las instancias del tipo de entidad no podrán guardarse en la base de datos a menos que se especifique esta relación. La clave foránea en la base de datos no será anulable.

http://msdn.microsoft.com/en-us/library/gg671317

losrequerido requerido requerido entidades de relación:

public class RequiredPrincipalA
{
    public int Id { get; set; }
    public virtual RequiredDependentA DependentA { get; set; }
}

public class RequiredDependentA
{
    public int Id { get; set; }
    public virtual RequiredPrincipalA PrincipalA { get; set; }
}

losobligatorio-opcional entidades de relación:

public class RequiredPrincipalB
{
    public int Id { get; set; }
    public virtual OptionalDependentB DependentB { get; set; }
}

public class OptionalDependentB
{
    public int Id { get; set; }
    public virtual RequiredPrincipalB PrincipalB { get; set; }
}

La configuración de DbContext y el modelo:

public class AppContext : DbContext
{
    public DbSet<RequiredPrincipalA> PrincipalAs { get; set; }
    public DbSet<RequiredDependentA> DependentAs { get; set; }

    public DbSet<RequiredPrincipalB> PrincipalBs { get; set; }
    public DbSet<OptionalDependentB> DependentBs { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<RequiredPrincipalA>()
            .HasRequired(o => o.DependentA)
            .WithRequiredPrincipal(o => o.PrincipalA);

        modelBuilder.Entity<RequiredPrincipalB>()
            .HasOptional(o => o.DependentB)
            .WithRequired(o => o.PrincipalB);
    }
}

El código de prueba:

Database.SetInitializer(new DropCreateDatabaseAlways<AppContext>());

using (var ctx = new AppContext())
{
    ctx.Database.Initialize(force: false);

    ctx.PrincipalAs.Add(new RequiredPrincipalA());
    ctx.PrincipalBs.Add(new RequiredPrincipalB());

    ctx.SaveChanges();
}

Soy consciente de que podría agregar un[Necesario] atributo de datos a las propiedades de navegación deRequiredPrincipalA.DependentA yRequiredDependentA.PrincipalA. Esto causaría que la validación de EF evite el escenario anterior. Sin embargo, no quiero hacer esto porque también valida la propiedad de navegación que se rellena al actualizar una entidad existente. Esto significa que la aplicación debe obtener previamente la entidad en el otro extremo de la relación para cada actualización.

¿Por qué no veo ninguna diferencia en el comportamiento de EF solo cuando se cambia una relación entrerequerido requerido requerido yobligatorio-opcional?

^ Tenga en cuenta que también se admite opcional-opcional pero esto no forma parte de mi pregunta. Hay diferencias obvias en el esquema de base de datos generado y el comportamiento en tiempo de ejecución cuando se configura una relación opcional-opcional.

Respuestas a la pregunta(2)

Su respuesta a la pregunta