Entity Framework: cómo resolver “¿La restricción FOREIGN KEY puede causar ciclos o múltiples rutas en cascada”?

Hay muchas preguntas sobre este problema, pero no pude resolver mi caso. alguien puede por favor echar un vistazo a esto:

Yo tengo unOffice mesa que tiene una relación de muchos conDoctor ySecretary mesas. Las dos últimas tablas, se derivan deEmployee tabla que tiene una relación de clave primaria compartida con predefinidoUsers mesa creada porsqlmembershipprovider. Parece que hay una relación de muchos a muchosUsers mesa yRoles Mesa en la que no tengo ninguna mano.

Mi problema estaba en crear una relación (cero, uno) - (uno) entre misEmployee mesa y esoUsers tabla que terminé con una relación de clave primaria compartida entre ellos y el error planteado, entonces. (¿Hay una mejor solución para ese problema?)

Aquí está el error:

La introducción de la restricción FOREIGN KEY 'FK_dbo.aspnet_UsersInRoles_dbo.aspnet_Users_UserId' en la tabla 'aspnet_UsersInRoles' puede causar ciclos o múltiples rutas en cascada. Especifique ON DELETE NO ACTION o ON UPDATE NO ACTION, o modifique otras restricciones FOREIGN KEY. No se pudo crear la restricción. Ver errores anteriores.

Aquí están mis códigos y códigos de membresía después de ingeniería inversa:

public class Office
{
    public Office()
    {
        this.Doctors = new HashSet<Doctor>();
        this.Secretaries = new HashSet<Secretary>();
    }

    [Key]
    public System.Guid OfficeId { get; set; }
    public virtual ICollection<Doctor> Doctors { get; set; }
    public virtual ICollection<Secretary> Secretaries { get; set; }
}

public class Employee
{
    [Key, ForeignKey("User")]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public System.Guid Id { get; set; }
    public string Name { get; set; }

    [ForeignKey("Office")]
    public System.Guid OfficeId { get; set; }

    // shared primary key 
    public virtual aspnet_Users User { get; set; }

    public virtual Office Office { get; set; }
}

public class Doctor :Employee
{
    public Doctor()
    {
        this.Expertises = new HashSet<Expertise>();
    }
    //the rest..    
    public virtual ICollection<Expertise> Expertises { get; set; }
}

public class Secretary : Employee
{
    // blah blah
}

public class aspnet_Users
{
    public aspnet_Users()
    {
        this.aspnet_Roles = new List<aspnet_Roles>();
    }

    public System.Guid ApplicationId { get; set; }
    public System.Guid UserId { get; set; }
    //the rest..
    public virtual aspnet_Applications aspnet_Applications { get; set; }
    public virtual ICollection<aspnet_Roles> aspnet_Roles { get; set; }
}

public class aspnet_Roles
{
    public aspnet_Roles()
    {
        this.aspnet_Users = new List<aspnet_Users>();
    }

    public System.Guid ApplicationId { get; set; }
    public System.Guid RoleId { get; set; }
    //the rest..
    public virtual aspnet_Applications aspnet_Applications { get; set; }
    public virtual ICollection<aspnet_Users> aspnet_Users { get; set; }
}

EDITAR: y las relaciones se profundizan, hay una relación de muchos entreUsers mesa yApplications mesa, también entreRoles yApplications también.

Respuestas a la pregunta(5)

Su respuesta a la pregunta