powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не удаляется автоматически список подчинённых сущностей в Entity framework.
4 сообщений из 4, страница 1 из 1
Не удаляется автоматически список подчинённых сущностей в Entity framework.
    #38773743
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет

Есть таблица Dealers и есть дочерняя ей таблица Phones.

Код: c#
1.
2.
3.
4.
5.
    public partial class Dealers
    {
        public int ID { get; set; }
        public virtual ICollection<Phones> Phones { get; set; }//связь с подчинённой таблицей
    }




Удаляю Dealers так:

Код: c#
1.
2.
     context.Dealers.Remove(item);
     context.SaveChanges();



выбрасывается исключение:

Конфликт инструкции DELETE с ограничением REFERENCE "FK_Phone_Dealers".
Конфликт произошел в базе данных "dev", таблица "dbo.Phones", column 'Dealers_ID'.
Выполнение данной инструкции было прервано.

Если предварительно удалить все phones для этого Dealer

Код: c#
1.
2.
3.
4.
            
List<Phones> phones = context.Phones.Where(i => i.Dealers_ID == item.ID).ToList();
            foreach (Phones phone in phones)
                context.Phones.Remove(phone);



Понятно, что пока существуют дочерние записи в Phones, родительскую таблицу Dealers удалять нельзя. Но разве фрэймворк не должен был сделать это автоматом перед удалением Dealers.
...
Рейтинг: 0 / 0
Не удаляется автоматически список подчинённых сущностей в Entity framework.
    #38773750
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigorMortis,

для этого нужно явно указать, что необходимо каскадное удаление. Например с помощью http://msdn.microsoft.com/ru-ru/library/gg696319(v=vs.113).aspx
...
Рейтинг: 0 / 0
Не удаляется автоматически список подчинённых сущностей в Entity framework.
    #38774198
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно ли как-то найти и удалить дочерние сущности объекта, тип которого неизвестен, но известно что это сущность EF?
То есть в метод передаётся обобщённый тип Т:

Код: c#
1.
2.
3.
4.
void DeleteChilds(T obj)
{

}


Здесь нам известен контекст - глобально, obj - сущность, представляющая родительскую таблицу, нужно найти и удалить её дочерние сущности-таблицы.
...
Рейтинг: 0 / 0
Не удаляется автоматически список подчинённых сущностей в Entity framework.
    #38774617
rigorMortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вобщем, вот, работает:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
        public void DeleteWithChild<T>(T parent) where T : class
        {
            using (TransactionScope tran = new TransactionScope())
            {
                try
                {
                    DeleteChild(parent);//delete all related child entityes
                    _db.Set<T>().Remove(parent);//delete parent entity
                    _db.SaveChanges();
                    tran.Complete();
                }
                catch 
                {
                    throw new Exception("DB error");
                }
            }
        }
        public void DeleteChild<T>(T entity) where T : class
        {
            foreach (PropertyInfo property in entity.GetType().GetProperties())//проходим по всем свойствам объекта
                if (typeof(IEnumerable).IsAssignableFrom(property.PropertyType) && property.PropertyType != typeof(string))// если коллекция
                {
                    Type genericType = property.PropertyType.GetGenericArguments()[0];//получаем то что у неё в угловых скобках
                    object propertyValue = property.GetValue(entity, null);//получаем саму коллекцию
                    _db.Set(genericType).RemoveRange((IEnumerable)propertyValue);//удаляем разом всю коллекцию из контекста
                }
        }
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Не удаляется автоматически список подчинённых сущностей в Entity framework.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]