У меня есть таблица основных таблиц и подробностей. Например, основная таблица - ObjectSet<'MasterObject>
, а таблица данных - ObjectSet<'DetailObject>
. Таким образом, каждый MasterObject
содержит EntityCollection<'DetailObject>
. Как я понимаю, я могу удалить DetailObject
из базы данных, используя следующий:Удалить элемент из БД с помощью EntityCollection.Remove()
EntityCollection<'DetailObject> ec = masterObject.DetailObjects;
// как свойства навигацииec.Remove(deleting_detail_object);
// deleting_detail_object будет удален и помечается для удаления.context.SaveChanges();
// У меня есть исключение
После Remove()
(свойство навигации) deleting_detail_object.MasterObject
является null
. Это нормально. Но context.SaveChanges()
дать мне следующее исключение:
«Операция не удалась:. Отношения не могут быть изменены, потому что один или несколько внешних ключей свойств ненулевое Когда вносятся изменения отношения, связанное свойство внешнего ключа: установлено на нулевое значение. Если внешний ключ не поддерживает нулевые значения, необходимо определить новое отношение, свойство внешнего ключа должно быть , которому присвоено другое ненулевое значение, или не связанный объект должен быть удален. "
я могу удалить это DetailObject
с помощью context.RemoveObject()
, но это можно сделать это с помощью EntityCollection<>
?
У меня следующая ситуация (... ммм очень похожи): MasterTable: id_master_object (интермедиат PrimaryKey) master_object_name (NVARCHAR ...) DetailTable: id_detail_object (интермедиат PrimaryKey) id_master_object (внешний ключ к MasterTable) id_color (внешний ключ для Цвета) Две нормализованные таблицы с отношением ... очень простая и стандартная ситуация. – vchs
Например, следующий код работает нормально: var deletingDetailObject = masterObject.DetailObjects.Single (s => s.id_detail_object == ...); context.DeleteObject (deletingDetailObject); контексте.Сохранить изменения(); // отлично, без исключения те же таблицы, тот же проект, тот же db ... я удивлен. Связь между MasterTable и DetailTable создается автоматически из существующего db. – vchs
В предыдущем примере кода после EntityCollection << 'DetailObject >>. Remove (deletingDetailObject); deletingDetailObject.EntityState был изменен на Modified. Почему бы не удалить? MSDN сказал: после удаления (...) deletingDetailObject будет отмечен для удаления. Может быть, это неправильно (я имею в виду entitycollection.remove() -> context.savechanges())? Спасибо. – vchs