2016-08-02 4 views
0

У меня есть следующие классы, и EF-соглашение создало таблицы в порядке - все хорошо. Теперь я хочу настроить каскадное удаление в ToDoList (так что, когда я удаляю ToDoList, все ToDoItems и UserToDoLists также автоматически удаляются). Должен ли я повторно указать, что EF-соглашение может обнаружить, чтобы установить WillCascadeOnDelete? Как указать эти отношения в свободном API?Как настроить каскадное удаление с помощью EF Fluent API

public class ToDoList 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
    public virtual ICollection<ToDoItem> ToDoItems { get; set; } 
    public virtual ICollection<UserToDoList> UserToDoLists { get; set; } 
} 

public class ApplicationUser : IdentityUser 
{ 
    public ApplicationUser() 
     : base() 
    { 
    } 

    public virtual ICollection<UserToDoList> UserToDoLists { get; set; } 
} 

// a todolist can have many users and a user can have many todolist 
// junction table will have addition fields 
public class UserToDoList 
{ 
    public string UserId { get; set; } 
    public virtual ApplicationUser User { get; set; } 

    public virtual int ToDoListId { get; set; } 
    public virtual ToDoList ToDoList { get; set; } 

    // additional fields 
    public bool IsOwner { get; set; } 
    public int Ordinal { get; set; } 
    public bool AllowEdit { get; set; } 
} 

public class UserToDoListConfig : EntityTypeConfiguration<UserToDoList> 
{ 
    public UserToDoListConfig() 
    { 
     HasKey(ut => new { ut.UserId, ut.ToDoListId }); 
    } 
} 

public class ToDoListConfig : EntityTypeConfiguration<ToDoList> 
{ 
    public ToDoListConfig() 
    { 
     Property(t => t.Description).IsRequired().HasMaxLength(50); 

     HasMany(t =>t.UserToDoLists).?? 
    } 
} 
+0

Возможный дубликат кода [Entity Framework (EF) Первое каскадное удаление для отношения «один-к-одному»] (http://stackoverflow.com/questions/17487577/entity-framework-ef-code-first -cascade-delete-for-one-to-zero-or-one-relations) – Kahbazi

+0

Каскадное удаление должно быть по умолчанию для отношений «один ко многим», как ваш. Вы проверяли сгенерированные таблицы/внешние ключи? –

+0

mine is many to many relationship – lee23

ответ

0

Это просто один-ко-многим из ToDoList в таблицу перехода UserToDoList, так что вы просто должны настроить отображение как это

HasMany(m => m.UserToDoLists) 
    .WithRequired(m => m.ToDoList) 
    .HasForeignKey(m => m.ToDoListId); 

и EF будет обрабатывать ваши каскадирование автоматически удаляет , так как на стороне соединительного стола требуется ToDoList.

+0

Спасибо, проблема заключалась также в том, что я ошибся при удалении из ApplicationUser.UserToDoLists, а не из DbContext.ToDoLists. – lee23