Удалить создает тупик в SQL - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть две таблицы, скажем, T1 и T2. T1 имеет ссылку на T2, как показано ниже:

Таблица: T1

|Col1|
|v1  |
|v2  |
|v3  |

Таблица: T2

|Id|Col1|Col2|
|1 |v1  |v2  |
|2 |v2  |v1  |
|3 |v1  |v3  |
|4 |v3  |v1  |

Итак, у нас есть первичный ключ T1 в качестве внешних ключей T2, Col1 и Col2. Теперь, когда приходит запрос на удаление для T1 (скажем, я хочу удалить v1), необходимо сначала удалить его ссылочную строку из T2 (в данном случае Id 1,2,3,4 в T2), а затем запись в T1 будет удалить.

Теперь, когда мы пытаемся удалить это с помощью Entity Framework, он застрял в тупике и завершается ошибкой.

Любое предложение о том, как решить эту проблему?

Обновлен код EF:

 using (_dbContext as IDisposable)
                {

                        var t1= _dbContext.T1
                        .Include(t1 => t1.Table3)
                        .FirstOrDefault(x => x.Id == Col1);

                         var lstT2 = _dbContext.T2
                        .Where(x => x.Col1 == value ||
                                    x.Col2== value).ToList();

                    using (var transaction = _dbContext.BeginTransaction())
                    {
                        try
                        {
                            foreach (var t2 in lstT2)
                            {
                                _dbContext.T2.Remove(t2);
                                _dbContext.SaveChanges();
                            }
                            _dbContext.T1.Remove(t1);

                            _dbContext.SaveChanges();
                            transaction.Commit();

                        }

                        catch (Exception ex)
                        {
                            transaction.Rollback();
                            NLogger.Log(LogLevel.Error, ex.Message);
                            throw ex;
                        }
                    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...