Каскадное удаление в EF4 CTP5 Code First выполняет обновление дочерних записей
Используя описанный здесь метод, я пытаюсь удалить родительскую запись и все связанные дочерние записи. Однако, что происходит, родительский объект удаляется, как и ожидалось, но поле ключа дочерней записи обновляется до 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 ответ
Связь между Product и Category была настроена как необязательная в связи с тем, что свойство внешнего ключа в классе Product (т.е. Product.CategoryId
) имеет обнуляемый тип (т.е. 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; }
}