Обновите идентификатор новой вставленной записи в другую таблицу, используя Entity Framework - PullRequest
0 голосов
/ 07 января 2019

У меня есть сценарий, в котором я должен вставить запись в таблицу, взять идентификатор вставленной записи и обновить вторую таблицу (с некоторыми другими свойствами)

Вот пример кода:

public void UpdateLookupDetails()
{
    string newId;            

    {
        //Add new record
        newId = Guid.NewGuid().ToString();
        var newRefUiRecord = new Entities.REFUILBLTXT
        {
            ID = newId,
            ACTIVEFLG = Constant.Flag.Yes,
            CRTTS = DateTime.Now,
            CRTUID = "cfbc94a9-16a5-11e1-8a27-a2e9ab9c0b63",
            LBLTXT = "Description",
            LOCALECD = Constant.LanguageCode.English,
            MODTS = DateTime.Now,
            MODUID = "cfbc94a9-16a5-11e1-8a27-a2e9ab9c0b63",
            LBLCD = "LookupList.DESC"
        };                
        _context.REFUILBLTXTs.Add(newRefUiRecord);                
    }

    var sample = _context.ZREFLISTs.FirstOrDefault(x => x.ID == "e8ae24b1-029c-44d2-a413-c25c19189751");
    _context.ZREFLISTs.Attach(sample);
    sample.REFLISTDESCLBLID = newId;
    _context.Entry(sample).Property(x => x.REFLISTDESCLBLID).IsModified = true;

    _context.SaveChanges();
}

На данный момент приложение застряло на _context.SaveChanges(); При запуске из интеграционных тестов через минуту или около того оно выдает ошибку, сообщающую

TaskCanceledException: A task was canceled.

Если я закомментирую _context.REFUILBLTXTs.Add(newRefUiRecord); ИЛИ _context.ZREFLISTs.Attach(sample); Это работает! Так что это единственное обновление или вставка записей одновременно.

Может кто-нибудь пролить свет на то, в чем здесь проблема?

Среда: Web API 2 + Oracle EF + код сначала

1 Ответ

0 голосов
/ 08 января 2019

Можете ли вы попытаться удалить оператор attach и попробовать как показано ниже:

var sample = _context.ZREFLISTs.FirstOrDefault(x => x.ID == "e8ae24b1-029c-44d2-a413-c25c19189751");
sample.REFLISTDESCLBLID = newId;
_context.Entry(sample).State = EntityState.Modified;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...