Entity Framework: jak rozwiązać problem „FOREIGN KEY constraint może powodować cykle lub wiele ścieżek kaskadowych”?

jest wiele pytań dotyczących tego problemu, ale nie mogłem rozwiązać mojego przypadku. czy ktoś może spojrzeć na to:

mamOffice stół, z którym ma jeden związekDoctor iSecretary stoły. Obie ostatnie tabele pochodzą zEmployee tabela, która ma relację współdzielonego klucza podstawowego z predefiniowanymUsers tabela utworzona przezsqlmembershipprovider. Wydaje się, że istnieje wiele relacji międzyUsers stół iRoles stół, w który nie mam żadnej ręki.

Mój problem polegał na stworzeniu (zero, jeden) - (jednego) związku między moimEmployee stół i toUsers tabelę, którą zakończyłem współużytkowaną relacją klucza podstawowego między nimi a podniesionym błędem (Czy istnieje lepsze rozwiązanie tego problemu?)

tutaj jest błąd:

Wprowadzenie ograniczenia KLUCZA ZAGRANICZNEGO „FK_dbo.aspnet_UsersInRoles_dbo.aspnet_Users_UserId” w tabeli „aspnet_UsersInRoles” może powodować cykle lub wiele ścieżek kaskadowych. Określ ON DELETE NO ACTION lub ON UPDATE NO ACTION lub zmodyfikuj inne ograniczenia FOREIGN KEY. Nie można utworzyć ograniczenia. Zobacz poprzednie błędy.

oto moje kody i kody członkostwa po inżynierii odwrotnej:

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; }
}

EDYTOWAĆ: a relacje pogłębiają się, istnieje między nimi jeden związekUsers stół iApplications stół, także międzyRoles iApplications zbyt.

questionAnswers(5)

yourAnswerToTheQuestion