Entity Framework (EF) Code First Cascade Delete für eine Eins-zu-Null-Beziehung oder eine Eins-zu-Null-Beziehung

Im Anschluss an den Abschnitt "Code First Modeling" desPluralsight-Kurs "Erste Schritte mit Entity Framework 5" von Julie LermanIch habe zwei POCO-Klassen mit einem erstellteins-zu-null-oder-eins Beziehung: ein Elternteil (Benutzer) und einwahlweise Kind (UserDetail).

Benutzer- und UserDetail-Datenmodelldiagramm (zum Anzeigen anklicken).

Beachten Sie im Diagramm, dassDie UserId-Eigenschaft ist ein Primärschlüssel und ein Fremdschlüssel für UserDetail.

Relevanter Code:

public class User
{
    //...

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }

    /* Has a 1:0..1 relationship with UserDetail */
    public virtual UserDetail UserDetail { get; set; }

    //...
}

public class UserDetail
{
    //...

    /* Has a 0..1:1 relationship with User */
    public virtual User User { get; set; }

    [Key, ForeignKey("User")]
    public int UserId { get; set; }

    //...
}

public class EFDbContext : DbContext
{
    public DbSet<User> Users { get; set; }
    //public DbSet<UserDetail> UserDetails { get; set; }  /* Explicit declaration not necessary. Context is aware of UserDetail entity due to 0..1:1 relationship with User */

    public EFDbContext()
    {
        Configuration.ProxyCreationEnabled = true;
        Configuration.LazyLoadingEnabled = true;
    }
}

public class UserRepository : IUserRepository
{
    private EFDbContext _context = new EFDbContext();

    public void Delete(User entity)
    {
        entity = _context.Users.Find(entity.UserId);

        //...

        _context.Users.Remove(entity);
        _context.SaveChanges();

        //...
    }
}

Wenn die Delete () -Methode in der UserRepository-Klasse aufgerufen wird, wird der Benutzerdatensatz in der Datenbank nicht gelöscht, da für den Fremdschlüssel in UserDetail die Kaskadenlöschung nicht aktiviert ist.

Die DELETE-Anweisung stand in Konflikt mit der REFERENCE-Einschränkung "FK_dbo.UserDetail_dbo.User_UserId".

Wie würden Sie kaskadierende Löschvorgänge für aktivieren?Eins-zu-Null-oder-Eins-Beziehungen Verwenden Sie zuerst den Entity Framework-Code (damit beim Löschen eines Benutzers automatisch UserDetail gelöscht wird)?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage