Каскадное удаление в коде EF4 CTP5 сначала выполняет обновление дочерних записей
Используя метод, описанный здесь , я пытаюсь удалить родительскую запись и все связанные с ней дочерние записи. Однако происходит следующее: родитель удаляется, как и ожидалось, но поле ключа дочерней записи обновляется до NULL вместо удаления.
Я также установил правило удаления внешнего ключа дочерней таблицы каскадным, и удаление из родительской таблицы в SQL Server Management выполняет каскадное удаление, как и ожидалось.
Я начал со следующего: walkthough , и изменение кода для выполнения удаления.
Это код:
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.CategoryId
) имеет тип nullable (т. е.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; } }