Каскадное удаление в EF4 CTP5 Code First выполняет обновление дочерних записей - PullRequest
3 голосов
/ 24 января 2011

Используя метод, описанный здесь , я пытаюсь удалить родительскую запись и все связанные дочерние записи. Однако, что происходит, родительский объект удаляется, как и ожидалось, но поле ключа дочерней записи обновляется до NULL, а не удаляется.

Я также установил правило удаления внешнего ключа дочерней таблицы на Cascade, а удаление из родительской таблицы в SQL Server Management выполняет каскадное удаление, как и ожидалось.

Я начал с того, что следовал этой прогулке , и изменил код для выполнения удаления.

это код:

 using (var db = new ProductContext())
 {
     var food = db.Categories.Find("FOOD");
     ((IObjectContextAdapter)db).ObjectContext.LoadProperty(food, f => f.Products);

     db.Categories.Remove(food);
    int recordsAffected = db.SaveChanges();

Есть что-то, что я пропускаю? Или ребенок-сирота записывает ожидаемый результат?

1 Ответ

2 голосов
/ 24 января 2011

Связь между Product и Category была настроена как необязательная, поскольку свойство внешнего ключа в классе Product (т. Е. Product.CategoryId) имеет тип NULL (т. Е. string).Чтобы сделать эту связь обязательной, чтобы дочерняя сущность была удалена в результате удаления родителя, вам нужно пометить CategoryId как Required, как я делал в следующем коде:

public class Category
{
    public string CategoryId { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Product> Products { get; set; }
}

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }

    [Required]
    public string CategoryId { get; set; }
    public virtual Category Category { get; set; }
}
...